有没有在Mac上生成标准128位GUID(UUID)的方法?
-
08-07-2019 - |
题
是否有与.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。
不隶属于 StackOverflow