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

StackOverflow https://stackoverflow.com/questions/291868

Вопрос

Есть ли встроенная функция, эквивалентная .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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top