我需要在启用ARC的代码中生成UUID字符串.
在做了一些研究之后,我得出了以下结论:
CFUUIDRef uuid = CFUUIDCreate(NULL);
NSString *uuidStr = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
我是否正确地使用了__bridge_transfer
以避免在电弧下泄漏任何物体?
我需要在启用ARC的代码中生成UUID字符串.
在做了一些研究之后,我得出了以下结论:
CFUUIDRef uuid = CFUUIDCreate(NULL);
NSString *uuidStr = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
我是否正确地使用了__bridge_transfer
以避免在电弧下泄漏任何物体?
我觉得不错.这就是我使用的(gist分)
- (NSString *)uuidString {
// Returns a UUID
CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
NSString *uuidString = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
CFRelease(uuid);
return uuidString;
}
Edited to add
如果您使用的是OS X 10.8或iOS 6,则可以使用新的NSUUID类生成字符串UUID,而无需转到Core Foundation:
NSString *uuidString = [[NSUUID UUID] UUIDString];
// Generates: 7E60066C-C7F3-438A-95B1-DDE8634E1072
但最重要的是,如果您只想为文件或目录名生成唯一的字符串,则可以使用NSProcessInfo
的globallyUniqueString
方法,如:
NSString *uuidString = [[NSProcessInfo processInfo] globallyUniqueString];
// generates 56341C6E-35A7-4C97-9C5E-7AC79673EAB2-539-000001F95B327819
它不是一个正式的UUID,但它对于您的网络和流程来说是独一无二的,对于很多情况来说都是一个不错的 Select .