【发布时间】:2010-09-30 10:37:06
【问题描述】:
我希望能够在 iPhone 和 iPad 上创建 GUID/UUID。
目的是能够为分布式数据创建唯一的密钥。有没有办法用 iOS SDK 做到这一点?
【问题讨论】:
-
有一篇关于如何确保您永远不会丢失生成的 UUID 的文章,即使对于 iOS 5 及更高版本使用 KeyChain 也是如此。 blog.onliquid.com/…
我希望能够在 iPhone 和 iPad 上创建 GUID/UUID。
目的是能够为分布式数据创建唯一的密钥。有没有办法用 iOS SDK 做到这一点?
【问题讨论】:
查看 Apple Developer 文档,我发现CFUUID 对象可用于 iPhone OS 2.0 及更高版本。
【讨论】:
[[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;
}
编辑:2014 年 1 月 29 日: 如果您的目标是 iOS 6 或更高版本,您现在可以使用更简单的方法:
NSString *UUID = [[NSUUID UUID] UUIDString];
【讨论】:
最简单的技术是使用NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]。请参阅NSProcessInfo 类参考。
【讨论】:
我已在此处上传了一个简单但快速的 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];
【讨论】:
在 Swift 中:
var uuid: String = NSUUID().UUIDString
println("uuid: \(uuid)")
【讨论】:
在 Swift 3.0
var uuid = UUID().uuidString
【讨论】: