Есть ли способ для генерации стандартного 128-битного GUID (UUID) на Mac? - PullRequest
21 голосов
/ 15 ноября 2008

Есть ли встроенная функция, эквивалентная .NET

Guid.NewGuid();

в какао?

Мое желание - создать строку, аналогичную 550e8400-e29b-41d4-a716-446655440000, которая представляет уникальный идентификатор.

Ответы [ 7 ]

42 голосов
/ 15 ноября 2008

UUID обрабатываются в Core Foundation библиотекой CFUUID. Функция, которую вы ищете: CFUUIDCreate .

К сведению: для дальнейших поисков: они чаще всего называются UUID, термин GUID очень редко используется за пределами мира Microsoft. Возможно, вам больше повезет с этим поисковым запросом.

32 голосов
/ 16 ноября 2008

Код:

Для строкового 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.

26 голосов
/ 14 апреля 2009

По крайней мере, в MacOSX 10.5.x вы можете использовать инструмент командной строки "uuidgen", чтобы получить строку например,

$ uuidgen

054209C4-3873-4679-8104-3C18AE780512

есть также опция -hdr с этой командой, которая удобно генерирует ее в стиле заголовка

Для получения дополнительной информации см. Справочную страницу.

12 голосов
/ 15 ноября 2008

или есть инструмент командной строки uuidgen.

9 голосов
/ 28 февраля 2014

С версии 10.8 вы также можете использовать: NSString * uuidString = [[NSUUID UUID] UUIDString];

4 голосов
/ 15 ноября 2008

Ознакомьтесь со статьей Wikipedia и страницей Core Foundation .

2 голосов
/ 15 ноября 2008

Начиная с 10.3 или около того, вы можете использовать [[NSProcessInfo processInfo] globallyUniqueString]. Однако, хотя в настоящее время генерирует UUID, этого никогда не было и не гарантируется, поэтому, если вам действительно нужен UUID , а не просто какая-либо уникальная строка, вы следует использовать CFUUID.

...