我目前正在查看NSMutableSet
由函数创建的a CFSetCreateMutable()
。文档指出 的返回值CFSetCreateMutable()
是免费桥接的,这意味着我可以简单地将其转换为NSMutableSet
. 这是否意味着向它发送release
消息是完全有效的?我是否总是可以安全地假设我总是可以将这些对象视为alloc
通过 NS 类来处理的?
问问题
427 次
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 对象和release
Coreautorelease
Foundation 对象一起使用。
我是否总是可以安全地假设我总是可以将这些对象视为通过 NS 类分配的?
不是真的:目前,CFType 和 NSObject 之间存在的任何共同点,例如-description
/ CFCopyDescription
,无论您如何创建对象都可以工作,但它们并不能像内存管理消息一样明确保证工作。
于 2012-01-01T06:25:31.653 回答