Есть ли способ для генерации стандартного 128-битного GUID (UUID) на Mac?
Есть ли встроенная функция, эквивалентная.NET
Guid.NewGuid();
в какао?
Мое желание состоит в том, чтобы произвести строку в соответствии с 550e8400-e29b-41d4-a716-446655440000
который представляет уникальный идентификатор.
8 ответов
UUID обрабатываются в Core Foundation библиотекой CFUUID. Функция, которую вы ищете - CFUUIDCreate.
К сведению: для дальнейших поисков: они чаще всего известны как UUID, термин GUID не очень часто используется за пределами мира Microsoft. Возможно, вам больше повезет с этим поисковым термином.
По крайней мере, в MacOSX 10.5.x вы можете использовать инструмент командной строки "uuidgen", чтобы получить вашу строку, например
$ uuidgen
054209C4-3873-4679-8104-3C18AE780512
есть также опция -hdr с этой командой, которая удобно генерирует ее в стиле заголовка
Смотрите man-страницу для получения дополнительной информации.
Некоторый код:
Для строкового UUID следующий метод класса должен сделать свое дело:
+(NSString*)UUIDString {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return [(NSString *)string autorelease];
}
если вы действительно хотите байты (не строку):
+(CFUUIDBytes)UUIDBytes {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFUUIDBytes bytes = CFUUIDGetUUIDBytes(theUUID);
CFRelease(theUUID);
return bytes;
}
где CFUUIDBytes - это структура байтов UUID.
Начиная с 10.8 вы также можете использовать: NSString *uuidString = [[NSUUID UUID] UUIDString];
Вы можете создать псевдоним в
~/.bash_profile
и позвони
uuid
из терминала:
alias uuid="uuidgen | tr '[:upper:]' '[:lower:]'"
Ознакомьтесь со статьей Википедии и страницей Core Foundation.
С 10.3 или около того, вы можете использовать [[NSProcessInfo processInfo] globallyUniqueString]
, Однако, хотя в настоящее время это генерирует UUID, это никогда не было и не гарантируется, поэтому, если вам действительно нужен UUID, а не просто какая-либо уникальная строка, вам следует использовать CFUUID.