何时使用ARC取消分配对象

时间:2013-09-11 22:52:09

标签: objective-c automatic-ref-counting

假设我有一个名为NSObject的自定义customClass类,其属性为NSMutableArray *thisArray;

我在根视图控制器中实例化customClass *instance = [[customClass alloc] init]。在customClass实现中的某处设置thisArray。

现在我的根视图控制器NSMutableArray (strong,nonatomic) *anotherArray中有一个属性,我通过anotherArray = customClass.thisArray设置它。如果我然后将customClass设置为nil,anotherArray是否仍然指向内存中的对象或者是否应该销毁它?剩下的对象及其属性内存怎么样?

2 个答案:

答案 0 :(得分:1)

使用ARC时,如果没有对该对象的强引用,则会释放对象。

在您的情况下,customClass具有强大的属性thisArray,并且您的视图控制器具有强大的属性anotherArray。当您将数组分配给customClass.thisArray并且没有其他强引用时,customClass会将thisArray保留在内存中(因为它有强引用)。如果您现在分配anotherArray = customClass.thisArray,则至少有两个对数组的强引用。

如果customClass被取消分配(当没有强引用时会发生这种情况)anotherArray仍然具有对原始数组的强引用,因此您的数组仍处于活动状态。

答案 1 :(得分:0)

当您在根视图控制器中执行anotherArray = customClass.thisArray时,由于anotherArray是一个强大的属性,引用计数会递增,因此如果customClassde-allocated,您仍然会有anotherArray = customClass.thisArray内存中的数组,其属性指向它。

此外,您可能会发现上面的示例无法编译,因为您无法执行[self setAnotherArray:[customClass thisArray]],您需要执行_anotherArray = [customClass thisArray]或使用支持变量{{1}}。