Joh*_*nac 4 objective-c automatic-ref-counting
如果我有一个非免费桥接的 Core Foundation对象,我可以安全地将所有权转移到ARC,还是为免费桥接类型保留的权限?
例如:
- (id)myBundle {
CFBundleRef b = CFBundleCreate(NULL, self.bundleURL);
return b == NULL ? nil : (__bridge_transfer id)b;
}
- (UInt32)myBundleVersionNumber {
return CFBundleGetVersionNumber((__bridge CFBundleRef)self.myBundle);
}
Run Code Online (Sandbox Code Playgroud)
每个CoreFoundation对象也是一个Objective-C对象.在过去,CFAutoRelease()在10.9中引入之前,非ARC代码将使用成语自动释放CoreFoundation对象[(id)<CFTypeRef> autorelease]; 由于CoreFoundation对象是Objective-C对象,这是可能的.
对应就是为什么在ARC中,CoreFoundation对象可以被__bridge_transfer赋予ARC.
所以答案是肯定的,您可以安全地将任何CoreFoundation对象的所有权转移给ARC.
如果您在汇编程序级别单步执行示例代码,您将发现ARC调用_objc_release,而这反过来将最终调用CFRelease.
注意:免费桥接对象是CoreFoundation和Objective-C中具有完全等价物的对象,因此它们可以互换使用.
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |