2008-11-15 38 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]。

相關問題