对象是否由指针拥有或者是对象拥有的指针?

时间:2013-11-12 12:09:07

标签: objective-c object casting automatic-ref-counting

这个问题与ARC和桥梁演员有关。 从“为了获得快乐的ARC体验,我们需要告诉编译器谁拥有指针”。 但是对象是由对象拥有的指针还是指针?或者例如函数main()拥有一些对象。 例如,我们使用“(_bridge Type)操作数”cast。 使用此指针的转换所有权保持与操作数。但谁拥有指针?

1 个答案:

答案 0 :(得分:1)

两个人都不拥有对方。您或ARC拥有对象

你不能“拥有”一个指针。指针只是对象的引用。 E.g。

NSArray *arr1 = [NSArray array];
NSArray *arr2 = arr1;

在这种情况下,arr1arr2都是指针指向同一个NSArray 对象。 ARC将确保在其范围的持续时间内保留对象。 (这部分我相信你已经知道了。)

当您将ARC管理的指针转换为非ARC管理的指针(例如从NSData *CFDataRef)或反之亦然时,桥接通知编译器是否应执行另一个保留/发布对象您的指针参考。这允许您对对象进行(拥有/拒绝)控制/释放控制。

E.g。如果您使用的是标准NSData对象,则它由ARC“拥有”。您希望将指针转换为NSData 对象CFDataRef的那一刻,您可以从ARC获得所有权。您可以选择直接使用__bridge,在这种情况下,ARC保留所有权,或使用CFBridgingRetain,在这种情况下,ARC会为您提供控制权,之后您将需要调用CFRelease您的新CFDataRef