如何在iOS中生成UUID


Answers:


174

尝试:

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进行免费桥接的。如果需要,请使用UUID字符串在CFUUID和NSUUID之间进行转换。不能保证两个NSUUID对象在指针值上是可比的(因为CFUUIDRef是);使用isEqual:比较两个NSUUID实例。


6
如果您使用的是iOS 6,则可以使用NSUUID:NSString * uuid = [[NSUUID UUID] UUIDString];
伊莱·伯克

2
在第1行上,CFUUIDRef udid可能应该CFUUIDRef uuid避免UDID(唯一设备标识符)与UUID(通用唯一标识符)之间的潜在混淆
CgodLEY 2014年


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

您真的不应该只是不带解释就保留代码,无论它多么简单
Sirens

Errr,不确定在XD一年半之后您为什么选择我的特定回复进行评论。
Bergasms 2014年

我没有意识到这一点为1.5岁..哦,它的工作很好,但.. :)
警报器

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

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


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

1
仅代码的答案对社区没有用。请查看如何回答
JimHawkins

-1

对于Swift 5.0,请使用它,

    let uuidRef = CFUUIDCreate(nil)
    let uuidStringRef = CFUUIDCreateString(nil, uuidRef)
    let uuid = uuidStringRef as String? ?? ""
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.