2012-01-11 37 views
1

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

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

任何线索?

+1

为什么你需要它更短?为确保它的独特性,它需要很长的时间。 – 2012-01-11 00:17:43

+0

我需要在会话ID附加请求ID,这将使这个字符串是一个巨大的。我将在服务器上记录此字符串以用于任何跟踪目的。 – Abhinav 2012-01-11 00:20:13

+0

你是否需要它更短,还是你需要它是独一无二的? – 2012-01-11 00:44:47

回答

6

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

此:

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?

+0

好的。你能告诉我如何编码吗? – Abhinav 2012-01-11 00:19:27

+0

我刚刚添加了一些链接 - 其中一个是base64编码/解码的objective-c帖子 – bryanmac 2012-01-11 00:25:56

+0

看看Mike Ho在S.O.的帖子。链接... – bryanmac 2012-01-11 00:33:21

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; 
} 
0

您可以尝试以下

1-

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

2-

之一