2009-01-09 88 views
188

我希望能夠在iPhone和iPad上創建GUID/UUID。如何使用iPhone SDK創建GUID/UUID

意圖是能夠爲分佈式數據創建全部唯一的密鑰。有沒有辦法用iOS SDK來做到這一點?

+3

有一篇關於如何確保您永遠不會丟失生成的UUID的文章,即使是iOS 5及更高版本使用KeyChain。 https://blog.onliquid.com/persistent-device-unique-identifier-ios-keychain/ – jasoares 2015-05-28 16:44:56

回答

306
[[UIDevice currentDevice] uniqueIdentifier] 

返回您的iPhone的唯一ID。

編輯:-[UIDevice uniqueIdentifier]現在已被棄用,應用程序被拒絕從App Store使用它。下面的方法現在是首選的方法。

如果您需要創建多個UUID,只是用這種方法(與ARC):

+ (NSString *)GetUUID 
{ 
    CFUUIDRef theUUID = CFUUIDCreate(NULL); 
    CFStringRef string = CFUUIDCreateString(NULL, theUUID); 
    CFRelease(theUUID); 
    return (__bridge NSString *)string; 
} 

編輯:一月,29 2014: 如果你的目標的iOS 6或更高版本,可以現在使用更簡單的方法:

NSString *UUID = [[NSUUID UUID] UUIDString]; 
+21

[[UIDevice currentDevice] uniqueIdentifier]已被棄用,從iOS 5開始,Apple是現在拒絕使用它的應用程序(截至2012年3月)。其餘的答覆仍然是準確的。 – Gorm 2012-03-28 20:15:54

+11

圍繞這個問題已經有一段時間了,我很確定最初的問題不是關於設備的唯一標識符,而是關於獲取一些有用的通用唯一標識符。 – 2012-04-12 03:43:16

+12

爲了使ARC符合您的要求,您必須投射字符串對象並移除autorelease調用。換句話說,添加強制轉換:NSString * string =(__bridge_transfer NSString *)CFUUIDCreateString(NULL,theUUID); – 2012-05-07 08:05:10

44

回顧Apple Developer文檔我發現CFUUID對象在iPhone OS 2.0和更高版本上可用。

+0

這正是我之後,謝謝 – rustyshelf 2009-01-09 06:48:25

22

最簡單的技術是使用NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]。請參見NSProcessInfo類參考。

7

我已經上傳了我的簡單而快速的實施一個GUID類的ObjC這裏:obj-c GUID

Guid* guid = [Guid randomGuid]; 
NSLog("%@", guid.description); 

它可以解析,並從不同的字符串格式爲好。

98

這是我使用的簡單代碼,符合ARC。

+(NSString *)getUUID 
{ 
    CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault); 
    NSString * uuidString = (__bridge_transfer NSString*)CFUUIDCreateString(kCFAllocatorDefault, newUniqueId); 
    CFRelease(newUniqueId); 

    return uuidString; 
} 
82

在iOS 6中,你可以很容易地使用:

NSUUID *UUID = [NSUUID UUID]; 
NSString* stringUUID = [UUID UUIDString]; 

的更多細節Apple's Documentations

19

斯威夫特

var uuid: String = NSUUID().UUIDString 
println("uuid: \(uuid)") 
12

雨燕3.0

var uuid = UUID().uuidString