这个问题与ARC和桥牌有关。摘自《为了获得愉快的 ARC 体验,我们需要告诉编译器谁拥有指针》一书。但是对象是指针拥有的还是指针拥有的呢?或者例如函数 main() 拥有一些对象。例如,我们使用了“(_bridge Type) 操作数”强制转换。通过这种转换,指针的所有权保留在操作数中。但谁拥有指针?
问问题
79 次
1 回答
1
任何一方都不拥有另一方。您或 ARC 拥有该对象。
你不能“拥有”一个指针。指针只是对对象的引用。例如
NSArray *arr1 = [NSArray array];
NSArray *arr2 = arr1;
在这种情况下,arr1
和arr2
都是指向同一个NSArray
对象的指针。ARC 将确保在其范围内保留该对象。(这部分我相信你已经知道了)。
当您将 ARC 管理的指针转换为非 ARC 管理的指针(例如 from NSData *
to CFDataRef
)或反之亦然时,桥接会通知编译器它是否应该对您的指针引用的对象执行另一个保留/释放。这允许您获取/释放对(拥有/不拥有)对象的控制权。
例如,如果您使用的是标准NSData
对象,则它由 ARC“拥有”。当您想将指向对象的指针转换为时,您可以从 ARC 获得所有权。在这里,您的选择是直接使用,在这种情况下 ARC 保留所有权,或者使用,在这种情况下,ARC 会给您控制权,您以后必须调用新的.NSData
CFDataRef
__bridge
CFBridgingRetain
CFRelease
CFDataRef
于 2013-11-12T12:38:59.873 回答