Objective c 可以管理非免费桥接核心基础物体? 如果我有一个不收费的桥接核心基础对象,我可以安全地将所有权转移给ARC,还是保留免费桥接类型的特权?
例如:Objective c 可以管理非免费桥接核心基础物体? 如果我有一个不收费的桥接核心基础对象,我可以安全地将所有权转移给ARC,还是保留免费桥接类型的特权?,objective-c,automatic-ref-counting,Objective C,Automatic Ref Counting,例如: - (id)myBundle { CFBundleRef b = CFBundleCreate(NULL, self.bundleURL); return b == NULL ? nil : (__bridge_transfer id)b; } - (UInt32)myBundleVersionNumber { return CFBundleGetVersionNumber((__bridge CFBundleRef)self.myBundle); } 每个C
- (id)myBundle {
CFBundleRef b = CFBundleCreate(NULL, self.bundleURL);
return b == NULL ? nil : (__bridge_transfer id)b;
}
- (UInt32)myBundleVersionNumber {
return CFBundleGetVersionNumber((__bridge CFBundleRef)self.myBundle);
}
每个CoreFoundation对象(
CFTypeRef
)也是Objective-C对象(id
)
在过去,在10.9中引入CFAutorelease()
之前,非ARC代码将使用[(id)autorelease]
习惯用法自动释放CoreFoundation对象,这是可能的,因为CoreFoundation对象是Objective-C对象
这种对应关系就是为什么在ARC中,CoreFoundation对象可以\uu bridge\u transfer
”传输到ARC
所以答案是肯定的,您可以安全地将任何CoreFoundation对象的所有权转移给ARC
如果您在汇编程序级别逐步浏览示例代码,您会发现ARC调用\u objc\u release
,而这反过来又会调用CFRelease
注释:免费桥接对象是CoreFoundation和Objtovi-C中有完全相同的对象,因此它们可以互换使用。
另一种方式,