【发布时间】:2013-01-16 06:19:14
【问题描述】:
如何在objective c中获取UUID,就像在Java中一样,UUID用于生成代表128位值的唯一随机数。
【问题讨论】:
标签: ios objective-c
如何在objective c中获取UUID,就像在Java中一样,UUID用于生成代表128位值的唯一随机数。
【问题讨论】:
标签: ios objective-c
试试:
CFUUIDRef udid = CFUUIDCreate(NULL);
NSString *udidString = (NSString *) CFUUIDCreateString(NULL, udid);
更新:
从 iOS 6 开始,there is an easier way to generate UUID。和往常一样,有多种方法可以做到这一点:
创建一个 UUID 字符串:
NSString *uuid = [[NSUUID UUID] UUIDString];
创建一个 UUID:
[NSUUID UUID]; // which is the same as..
[[NSUUID] alloc] init];
创建一个NSConcreteUUID 类型的对象,可以很容易地转换为NSString,看起来像这样:BE5BA3D0-971C-4418-9ECF-E2D1ABCB66BE
文档中的注意事项:
注意: NSUUID 类不是与 CoreFoundation 的 CFUUIDRef 桥接的免费电话。如果需要,使用 UUID 字符串在 CFUUID 和 NSUUID 之间进行转换。不能保证两个 NSUUID 对象可以通过指针值进行比较(就像 CFUUIDRef 一样);使用 isEqual: 比较两个 NSUUID 实例。
【讨论】:
CFUUIDRef udid 可能应该是 CFUUIDRef uuid 以避免 UDID(唯一设备标识符)与 UUID(通用唯一标识符)的潜在混淆
Raptor's answer 的 Swift 版本:
let uuid = UUID().uuidString
【讨论】:
+ (NSString *)uniqueFileName
{
CFUUIDRef theUniqueString = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUniqueString);
CFRelease(theUniqueString);
return [(NSString *)string autorelease];
}
【讨论】:
-(NSString*) myUUID()
{
CFUUIDRef newUniqueID = CFUUIDCreate(kCFAllocatorDefault);
CFStringRef newUniqueIDString = CFUUIDCreateString(kCFAllocatorDefault, newUniqueID);
NSString *guid = (__bridge NSString *)newUniqueIDString;
CFRelease(newUniqueIDString);
CFRelease(newUniqueID);
return([guid lowercaseString]);
}
【讨论】:
您可以在 iOS 5 或更低版本中使用 CFUUID,在 iOS 6 和 7 中使用 NSUUID。 为了使其更安全,您可以将 UUID 存储在钥匙串中
【讨论】:
- (NSString*)generateGUID{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return [NSString stringWithFormat:@"%@", string];
}
【讨论】:
对于 Swift 5.0,使用这个,
let uuidRef = CFUUIDCreate(nil)
let uuidStringRef = CFUUIDCreateString(nil, uuidRef)
let uuid = uuidStringRef as String? ?? ""
【讨论】: