我希望能够在iPhone和iPad上创建一个GUID/UUID。
这样做的目的是能够为所有唯一的分布式数据创建键。iOS SDK有办法做到这一点吗?
在查看Apple Developer文档时,我发现CFUUID对象在iPhone OS 2.0及更高版本上可用。
[[UIDevice currentDevice] uniqueIdentifier]
返回你iPhone的唯一ID。
编辑:-[UIDevice uniqueIdentifier]现在已弃用,使用它的应用程序将被App Store拒绝。下面的方法现在是首选的方法。
-[UIDevice uniqueIdentifier]
如果你需要创建多个UUID,只需使用以下方法(使用ARC):
+ (NSString *)GetUUID { CFUUIDRef theUUID = CFUUIDCreate(NULL); CFStringRef string = CFUUIDCreateString(NULL, theUUID); CFRelease(theUUID); return (__bridge NSString *)string; }
编辑:Jan, 29 2014: 如果你的目标是iOS 6或更高版本,你现在可以使用更简单的方法:
NSString *UUID = [[NSUUID UUID] UUIDString];
最简单的方法是使用NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]。参见NSProcessInfo类引用。
NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]
我已经上传了ObjC的Guid类的简单但快速的实现:obj-c GUID
Guid* guid = [Guid randomGuid]; NSLog("%@", guid.description);
它还可以解析各种字符串格式。
这是我使用的简单代码,与ARC兼容。
+(NSString *)getUUID { CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault); NSString * uuidString = (__bridge_transfer NSString*)CFUUIDCreateString(kCFAllocatorDefault, newUniqueId); CFRelease(newUniqueId); return uuidString; }
在iOS 6中,你可以轻松使用:
NSUUID *UUID = [NSUUID UUID]; NSString* stringUUID = [UUID UUIDString];
更多细节在苹果公司的文件中
在斯威夫特:
var uuid: String = NSUUID().UUIDString println("uuid: \(uuid)")
在斯威夫特3.0
var uuid = UUID().uuidString