可以管理非通信的非桥梁核心基础对象



如果我有一个非通信桥梁核心基础对象,我可以安全地将所有权转移到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中具有确切等价物的那些物体,因此可以互换使用。

最新更新