这个问题与ARC和桥梁演员有关。 从“为了获得快乐的ARC体验,我们需要告诉编译器谁拥有指针”。 但是对象是由对象拥有的指针还是指针?或者例如函数main()拥有一些对象。 例如,我们使用“(_bridge Type)操作数”cast。 使用此指针的转换所有权保持与操作数。但谁拥有指针?
答案 0 :(得分:1)
两个人都不拥有对方。您或ARC拥有对象。
你不能“拥有”一个指针。指针只是对象的引用。 E.g。
NSArray *arr1 = [NSArray array];
NSArray *arr2 = arr1;
在这种情况下,arr1
和arr2
都是指针指向同一个NSArray
对象。 ARC将确保在其范围的持续时间内保留对象。 (这部分我相信你已经知道了。)
当您将ARC管理的指针转换为非ARC管理的指针(例如从NSData *
到CFDataRef
)或反之亦然时,桥接通知编译器是否应执行另一个保留/发布对象您的指针参考。这允许您对对象进行(拥有/拒绝)控制/释放控制。
E.g。如果您使用的是标准NSData
对象,则它由ARC“拥有”。您希望将指针转换为NSData
对象至CFDataRef
的那一刻,您可以从ARC获得所有权。您可以选择直接使用__bridge
,在这种情况下,ARC保留所有权,或使用CFBridgingRetain
,在这种情况下,ARC会为您提供控制权,之后您将需要调用CFRelease
您的新CFDataRef
。