2008-11-15 39 views
20

有一个内置的功能等同于.NET的有没有一种方法可以在Mac上生成标准的128位GUID(UUID)?

Guid.NewGuid(); 

可可?

我的愿望是,以产生沿550e8400-e29b-41d4-a716-446655440000表示的唯一标识符的线的字符串。

+5

而不是问“有没有相同功能为foo()”你应该解释一下你问的功能一样。 Mac OS X没有“Guid”对象,它具有CFUUIDRef。长期的Mac开发人员可能不会从地面上的洞中知道“Guid”。 – 2008-11-16 10:07:44

回答

42

的UUID在核心基础处理,由CFUUID库。您正在寻找的功能是CFUUIDCreate

FYI进一步搜索:这是最俗称的UUID,GUID是不是经常使用微软的世界之外的术语。该搜索词可能会带来更多运气。

11

或还有的uuidgen命令行工具。

+5

显然该实用程序已更名为`uuidgen`。至少,就像雪豹一样。 – VxJasonxV 2011-04-27 20:14:06

+0

谢谢!我只是将它从`genuuid`更新为`uuidgen`。 – ma11hew28 2014-02-10 17:06:25

2

自10.3左右,你可以使用[[NSProcessInfo processInfo] globallyUniqueString]。然而,尽管这目前生成一个UUID,它永远不会一直并且仍然不能保证做到这一点,所以如果你真的需要一个UUID,不是任何唯一的字符串,你应该使用CFUUID。

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

+0

@Jay:从技术上讲,就是Core Foundation API,它是用C语言编写的.Cocoa是用Objective C编写的,并且更加简洁(大部分时间)。 – geon 2013-03-01 15:07:57

24

至少MacOSX上10.5您可以使用命令行工具“的uuidgen”让您的字符串 例如

$的uuidgen

054209C4-3873-4679-8104-3C18AE780512

有也是一种选择-hdr这个COMAND它可以方便地生成它的标题样式

参见手册页进一步的相关信息。

8

自10.8您也可以使用:的NSString * uuidString = [[NSUUID UUID] UUIDString]。

相关问题