有没有在Mac上生成标准128位GUID(UUID)的方法?

时间:2008-11-15 00:30:00

标签: cocoa macos guid uuid core-foundation

是否有与.NET的

等效的内置函数
Guid.NewGuid();

在可可?

我希望在550e8400-e29b-41d4-a716-446655440000的行上生成一个代表唯一标识符的字符串。

8 个答案:

答案 0 :(得分:42)

UUID由Core Foundation处理,由CFUUID库处理。您正在寻找的功能是CFUUIDCreate

进一步搜索的FYI:这些通常称为UUID,术语GUID在Microsoft世界之外并不经常使用。您可能会对该搜索字词感到更幸运。

答案 1 :(得分:32)

一些代码:

对于字符串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字节的struct

答案 2 :(得分:26)

至少在MacOSX 10.5.x上,您可以使用命令行工具“uuidgen”来获取字符串  e.g。

$ uuidgen

054209C4-3873-4679-8104-3C18AE780512

还有一个选项-hdr,使用此命令可以方便地以标题样式

生成它

有关更多信息,请参阅man-page。

答案 3 :(得分:12)

或者是uuidgen命令行工具。

答案 4 :(得分:9)

从10.8开始你也可以使用:NSString * uuidString = [[NSUUID UUID] UUIDString];

答案 5 :(得分:4)

查看Wikipedia文章和Core Foundation页面。

答案 6 :(得分:2)

从10.3左右开始,您可以使用[[NSProcessInfo processInfo] globallyUniqueString]。但是,虽然此当前生成一个UUID,但它从来没有并且仍然不能保证这样做,所以如果你真的需要一个 UUID 而不是任何唯一的字符串,你应该使用CFUUID。

答案 7 :(得分:1)

您可以在 ~/.bash_profile 中创建别名并从终端调用 uuid

alias uuid="uuidgen | tr '[:upper:]' '[:lower:]'"