在Objective C中生成唯一ID

时间:2012-01-11 00:10:55

标签: iphone objective-c ios cocoa-touch

我们如何在Objective C中获取唯一ID。我想为我的会话创建一个唯一的ID&然后每次发生服务器调用时生成一个ID。每次此ID都应该是唯一的。

我尝试使用CFUUID类,它为我们提供了一个巨大的唯一ID(4FE9D00C-531E-45E8-B10E-11968ACC36E9)。我想要一个更小尺寸的唯一ID。

有任何线索吗?

3 个答案:

答案 0 :(得分:6)

guid(通过剪切组合)生成唯一ID。如果你想要的字符更少,那么一个选项是base64encode guid。这允许每个字符有64种可能性而不是16(0-9,A-F)

此:

540c2d5f-a9ab-4414-bd36-9999f5388773

变为:

Xy0MVKupFES9NpmZ9TiHcw

例如:(C#)http://www.singular.co.nz/blog/archive/2007/12/20/shortguid-a-shorter-and-url-friendly-guid-in-c-sharp.aspx

这是关于objective-c编码/解码的SO帖子(看看@ Mike Ho帖子):

How do I do base64 encoding on iphone-sdk?

答案 1 :(得分:0)

这也是我的问题,我喜欢这个答案,但我想在这里完成一个代码,我知道这是旧的,但也许它可以帮助某人:

// DataWithLength is a byte size of UUID. So 32 bytes = 256 bits string
- (NSString*)generateSecureUUID {

    NSMutableData *data = [NSMutableData dataWithLength:32];

    int result = SecRandomCopyBytes(NULL, 32, data.mutableBytes);

    NSAssert(result == 0, @"Error generating random bytes: %d", errno);

    NSString *base64EncodedData = [data base64EncodedStringWithOptions:0];

    return base64EncodedData;
}

答案 2 :(得分:0)

您可以尝试以下其中一种

1 -

CFUUIDRef udidCFUUIDRef = CFUUIDCreate(NULL);
    NSString *UUIDString_token_name = (NSString *) CFBridgingRelease(CFUUIDCreateString(NULL, udidCFUUIDRef));

2-

NSString *UUIDString = [[NSUUID UUID] UUIDString];