Есть ли способ генерировать стандартный 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 для получения дополнительной информации.
начиная с 10.3 или около того, вы можете использовать [[NSProcessInfo processInfo] globallyUniqueString]
. Впрочем, пока это в настоящее время генерирует UUID, он никогда не был и до сих пор не гарантирует этого, поэтому, если вам действительно нужен UUID и не только любая уникальная строка, вы должны использовать CFUUID.