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

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

Guid.NewGuid();

в какао?

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

7 ответов


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

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


код:

для 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.


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

$ uuidgen

054209C4-3873-4679-8104-3C18AE780512

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

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


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


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


Проверьте Википедия статьи Основной Фонд страница.


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