我需要在启用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

但最重要的是,如果您只想为文件或目录名生成唯一的字符串,则可以使用NSProcessInfogloballyUniqueString方法,如:

NSString *uuidString = [[NSProcessInfo processInfo] globallyUniqueString];
// generates 56341C6E-35A7-4C97-9C5E-7AC79673EAB2-539-000001F95B327819

它不是一个正式的UUID,但它对于您的网络和流程来说是独一无二的,对于很多情况来说都是一个不错的 Select .

Objective-c相关问答推荐

如何获取 NSDictionary 中的第一个元素?

NSError 和 __autoreleasing

在 Objective-C 中实现纯虚方法

如何在 iPhone 应用程序的 UINavigationBar 中添加图像

将 NSArray 转换为 NSDictionary

滚动后检测 UITableView 中的当前顶部单元格

自定义 UINavigationBar 背景

无法加载 xcode 项目,因为它已从另一个项目或工作区打开

UIBezierPath 减go 路径

Objective C 中的调用方法或发送消息

仅在 UIView 顶部的圆角

计算 UILabel 文本大小

UIDatePicker 中的最小和最大日期

在 UITableView 中更改复选标记的 colored颜色

如何配置我的应用程序 - 菜单项被禁用?

iPhone SDK:如何在视图中播放视频?而不是全屏

Xcode没有编译任何项目? 'clang 失败,退出代码 255'

Xcode 的不完整实现警告

无法从其 DataSource 获取单元格

Objective C 消息分发机制