Есть ли встроенная функция, эквивалентная .NET
Guid.NewGuid();
в Cocoa?
Мое желание состоит в том, чтобы создать строку вдоль строк 550e8400-e29b-41d4-a716-446655440000
, которая представляет уникальный идентификатор.
Есть ли встроенная функция, эквивалентная .NET
Guid.NewGuid();
в Cocoa?
Мое желание состоит в том, чтобы создать строку вдоль строк 550e8400-e29b-41d4-a716-446655440000
, которая представляет уникальный идентификатор.
UUID обрабатываются в Core Foundation библиотекой CFUUID. Функция, которую вы ищете, CFUUIDCreate.
FYI для дальнейших поисков: они чаще всего называются UUID, термин 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 с этим коммандом, которая удобно генерирует ее в стиле заголовка
См. man-страницу для получения дополнительной информации.
или есть инструмент командной строки uuidgen
.
С 10.8 вы также можете использовать: NSString * uuidString = [[NSUUID UUID] UUIDString];
Ознакомьтесь с Wikipedia и Core Foundation.
С 10.3 или около того вы можете использовать [[NSProcessInfo processInfo] globallyUniqueString]
. Однако, хотя в настоящее время он генерирует UUID, он никогда не был и по-прежнему не гарантирует этого, поэтому, если вам действительно нужен UUID, а не просто любая уникальная строка, вы должны использовать CFUUID.