7

关于 CFUUID 有几个很好的例子,特别是这个:

如何使用 iPhone SDK 创建 GUID/UUID

但它是为前 ARC 代码制作的,而且我还不是 CF 迷(还),所以有人可以提供适用于 ARC 的示例代码吗?

+ (NSString *)GetUUID
{
  CFUUIDRef theUUID = CFUUIDCreate(NULL);
  CFStringRef string = CFUUIDCreateString(NULL, theUUID);
  CFRelease(theUUID);
  return [(NSString *)string autorelease];
}
4

3 回答 3

23

你想要一个“桥接转移”:

+ (NSString *)GetUUID
{
  CFUUIDRef theUUID = CFUUIDCreate(NULL);
  CFStringRef string = CFUUIDCreateString(NULL, theUUID);
  CFRelease(theUUID);
  return (__bridge_transfer NSString *)string;
}

过渡到 ARC指南说

__bridge_transferCFBridgingRelease()将非 Objective-C 指针移动到 Objective-C 并将所有权转移给 ARC。

然而!您还应该重命名您的方法。ARC 使用方法名称约定来推断保留计数,并且get以 Cocoa 开头的方法具有特定含义,包括传入缓冲区以填充数据。更好的名称是buildUUID描述 UUID 使用的另一个词:pizzaUUIDbearUUID.

于 2012-05-07T03:33:01.767 回答
5

假设此时您不再需要支持 6.0 之前的 iOS,您可以跳过所有 Core Foundation UUID 内容,只需执行以下操作即可获得新的内容:

NSString * uuidStr = [[NSUUID UUID] UUIDString];
于 2015-01-18T02:15:09.257 回答
0

单线:

NSString *UUID = CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, CFUUIDCreate(NULL)));
于 2014-04-03T13:44:48.780 回答