如果我有一个非通信桥梁核心基础对象,我可以安全地将所有权转移到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);
}
每个核心找到对象(CFTypeRef
)也是一个客观-C对象(id
)。
在过去,在10.9中引入CFAutorelease()
之前,非ARC代码将使用[(id)<CFTypeRef> autorelease]
IDIOM自动发布CoreSefoundation对象,这是由于corefoundation对象是Objective-C对象。
对应关系是为什么在弧中可以 __bridge_transfer
'ed到弧。
所以答案是肯定的,您可以安全地将任何核心对象的所有权转移到弧。
如果您在汇编器级别浏览示例代码,您会发现拨打 _objc_release
,又将调用CFRelease
。
注意:无电话桥接的对象是核心原理和Objective-C中具有确切等价物的那些物体,因此可以互换使用。