免费桥接对象,保留和释放

时间:2011-12-31 20:40:19

标签: objective-c core-foundation nsmutableset

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

2 个答案:

答案 0 :(得分:7)

想象一下CFSetCreateMutable()等同于[[NSMutableSet alloc] init],因为你必须在完成后释放它。如果您使用ARC,则可以使用桥接强制转换将{CFMutableSet>强制转换为NSMutableSet:(__bridge_transfer NSMutableSet *)theCFSet。这将告诉ARC它负责在超出范围后释放它。

答案 1 :(得分:1)

  

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

是。 This is explicitly guaranteed in the docs

  

从示例中注意,内存管理功能和方法也是可以互换的 - 您可以将CFRelease与Cocoa对象一起使用,将releaseautorelease与Core Foundation对象一起使用。


  

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

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