Есть ли способ генерации стандартного 128-битного GUID (UUID) на Mac?

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

Guid.NewGuid();

в Cocoa?

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

Ответ 1

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

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

Ответ 2

Некоторые коды:

Для строкового 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 - это struct байтов UUID.

Ответ 3

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

$uuidgen

054209C4-3873-4679-8104-3C18AE780512

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

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

Ответ 4

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

Ответ 5

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

Ответ 7

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