Есть ли способ создать стандартный 128-битный GUID (UUID) на Mac?
-
08-07-2019 - |
Вопрос
Есть ли встроенная функция, эквивалентная .NET?
Guid.NewGuid();
в какао?
Мое желание состоит в том, чтобы создать строку по принципу 550e8400-e29b-41d4-a716-446655440000
который представляет собой уникальный идентификатор.
Решение
UUID обрабатываются в Core Foundation библиотекой CFUUID. Функция, которую вы ищете: «> CFUUIDCreate .
К сведению: для дальнейших поисков: они чаще всего называются 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 - это структура байтов UUID.
По крайней мере, на Macosx 10.5.x вы можете использовать инструмент командной строки "uuidgen", чтобы получить свою строку, например,
$ uuidgen
054209C4-3873-4679-8104-3C18AE780512
с этой командой также есть опция -hdr, которая удобно генерирует ее в стиле заголовка.
Дополнительную информацию смотрите на man-странице.
или есть инструмент командной строки uuidgen
.
Начиная с 10.8, вы также можете использовать: NSString * uuidString = [[NSUUID UUID] UUIDString];
Ознакомьтесь с Википедией статьей и Страница Базового фонда .
Начиная с версии 10.3, вы можете использовать [[NSProcessInfo processInfo] globallyUniqueString]
. Однако, хотя этот в настоящее время генерирует UUID, он никогда не был и до сих пор не гарантированно сделает это, поэтому если вам действительно нужен UUID , а не просто какая-либо уникальная строка , вы должны использовать CFUUID.