是否有与.NET的

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

在可可?

我的愿望是沿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是结构的UUID字节。

至少在MacOSX 10.5.x上,您可以使用命令行工具<!>“uuidgen <!>”;得到你的字符串  e.g。

$ uuidgen

054209C4-3873-4679-8104-3C18AE780512

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

生成它

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

或者是uuidgen命令行工具。

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

查看维基百科文章和 Core Foundation 页面。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top