2013年6月19日 星期三

關於 UUID

個人解法

+(NSString*)getUUID {

NSUserDefaults* pref = [NSUserDefaults standardUserDefaults];

NSString* uuid = [pref stringForKey:LOG_KEY_UUID];

if (uuid == nil || [uuid length]<=0) {

CFUUIDRef uuidObject = CFUUIDCreate(kCFAllocatorDefault);

uuid = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidObject);

[pref setValue:uuid forKey:LOG_KEY_UUID] ;

[pref synchronize];

CFRelease(uuidObject);

}

return uuid;

}

官方解法

http://www.neatstudio.com/show-2040-1.shtml

  1. #define NEW_UUID_KEY    @"uuid_created_by_developer"  
  2.    
  3. @interface NewUUID : NSObject {  
  4.    
  5.     NSString *uuid;  
  6.    
  7. }  
  8.    
  9. + (NSString *)identifier;  
  10.    
  11. @property (nonatomic, retain) NSString *uuid;  
  12.    
  13. @end  
  1. #import <Foundation/Foundation.h>  
  2.    
  3. #import "NewUUID.h"  
  4.    
  5. @implementation NewUUID  
  6.    
  7. @synthesize uuid;  
  8.    
  9. - (id)init {  
  10.     self = [super init];  
  11.     if (self) {  
  12.         uuid = NULL;  
  13.         return self;  
  14.     }  
  15.    
  16.     return nil;  
  17. }  
  18.    
  19. + (id)_instance {  
  20.     static id obj = nil;  
  21.     if( nil == obj ) {  
  22.         obj = [[self alloc] init];  
  23.     }  
  24.    
  25.     return obj;  
  26. }  
  27.    
  28. + (NSString *)identifier {  
  29.    
  30.     NSUserDefaults *handler = [NSUserDefaults standardUserDefaults];  
  31.     [[NewUUID _instance] setUuid:[NSString stringWithFormat:@"%@", [handler objectForKey:NEW_UUID_KEY]]];  
  32.    
  33.     if (NULL == [[NewUUID _instance] uuid] || 46 > [[[NewUUID _instance] uuid] length]) {  
  34.    
  35.         CFUUIDRef uuid = CFUUIDCreate(NULL);  
  36.         CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);  
  37.    
  38.         NSString *result = [NSString stringWithFormat:@"%@-%@", @"new-uuid-", uuidStr];  
  39.    
  40.         CFRelease(uuidStr);  
  41.         CFRelease(uuid);  
  42.    
  43.         [[NewUUID _instance] setUuid:result];  
  44.    
  45.    
  46.         [handler setObject:[[NewUUID _instance] uuid] forKey:NEW_UUID_KEY];  
  47.         [handler synchronize];  
  48.     }  
  49.    
  50.     return [[NewUUID _instance] uuid];  
  51. }  
  52.    
  53. @end  

沒有留言: