1

我目前正在查看NSMutableSet由函数创建的a CFSetCreateMutable()。文档指出 的返回值CFSetCreateMutable()是免费桥接的,这意味着我可以简单地将其转换为NSMutableSet. 这是否意味着向它发送release消息是完全有效的?我是否总是可以安全地假设我总是可以将这些对象视为alloc通过 NS 类来处理的?

4

2 回答 2

7

想象一下,这CFSetCreateMutable()相当于 [[NSMutableSet alloc] init],因为你必须在完成后释放对象。如果您使用的是 ARC,则可以使用桥接转换将 CFMutableSet 转换为 NSMutableSet (__bridge_transfer NSMutableSet *)theCFSet:。这将告诉 ARC 它负责在超出范围后释放该​​集合。

于 2011-12-31T20:48:34.567 回答
1

文档指出 CFSetCreateMutable() 的返回值是免费桥接的,这意味着我可以简单地将其转换为 NSMutableSet。这是否意味着向它发送发布消息是完全有效的?

是的。这在文档中得到明确保证

请注意,该示例中的内存管理函数和方法也是可以互换的——您可以CFRelease与 Cocoa 对象和releaseCore autoreleaseFoundation 对象一起使用。


我是否总是可以安全地假设我总是可以将这些对象视为通过 NS 类分配的?

不是真的:目前,CFType 和 NSObject 之间存在的任何共同点,例如-description/ CFCopyDescription,无论您如何创建对象都可以工作,但它们并不能像内存管理消息一样明确保证工作。

于 2012-01-01T06:25:31.653 回答