在iOS中如何生成UUID

80

如何在Objective-C中获取UUID,就像Java中使用UUID生成代表128位值的唯一随机数。


1
可能是重复的问题:如何使用iPhone SDK创建GUID / UUID - Basil Bourque
7个回答

176

尝试:

CFUUIDRef udid = CFUUIDCreate(NULL);
NSString *udidString = (NSString *) CFUUIDCreateString(NULL, udid);

更新:

从iOS 6开始,有一种更简单的方法来生成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不是toll-free bridged。 如有需要,请使用UUID字符串在CFUUID和NSUUID之间进行转换。 两个NSUUID对象不能保证通过指针值(如CFUUIDRef)进行比较; 使用isEqual:来比较两个NSUUID实例。


6
如果您正在使用iOS 6,您可以使用NSUUID:NSString * uuid = [[NSUUID UUID] UUIDString]; NSUUID可以生成唯一的字符串标识符(UUID),并且这段代码将返回一个UUID字符串。 - Eli Burke
2
第一行中,“CFUUIDRef udid” 可能应该改为 “CFUUIDRef uuid”,以避免将 UDID(唯一设备标识符)与 UUID(通用唯一标识符)混淆。 - CgodLEY

10

6
+ (NSString *)uniqueFileName
{
    CFUUIDRef theUniqueString = CFUUIDCreate(NULL);
    CFStringRef string = CFUUIDCreateString(NULL, theUniqueString);
    CFRelease(theUniqueString);
    return [(NSString *)string autorelease];
}

不管代码多么简单,你也不应该没有任何解释地离开它。 - Allison
不太确定为什么你会选择在一年半之后评论我的特定回复 XD。 - Bergasms
我没有意识到它已经1.5年了...哦,不过它确实工作得很好.. :) - Allison

3
-(NSString*) myUUID()
{
    CFUUIDRef newUniqueID = CFUUIDCreate(kCFAllocatorDefault);
    CFStringRef newUniqueIDString = CFUUIDCreateString(kCFAllocatorDefault, newUniqueID);
    NSString *guid = (__bridge NSString *)newUniqueIDString;
    CFRelease(newUniqueIDString);
    CFRelease(newUniqueID);
    return([guid lowercaseString]);
}

1
你可以在iOS 5或更低版本中使用CFUUID,在iOS 6和7中使用NSUUID。为了使其更加安全,你可以将UUID存储在钥匙串中。

0
- (NSString*)generateGUID{
    CFUUIDRef theUUID = CFUUIDCreate(NULL);
    CFStringRef string = CFUUIDCreateString(NULL, theUUID);
    CFRelease(theUUID);
    return [NSString stringWithFormat:@"%@", string];
}

1
仅有代码的答案对社区没有用处。请查看[答案]。 - JimHawkins

-3

对于Swift 5.0,请使用以下内容:

    let uuidRef = CFUUIDCreate(nil)
    let uuidStringRef = CFUUIDCreateString(nil, uuidRef)
    let uuid = uuidStringRef as String? ?? ""

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接