1

假设我有一个使用属性NSObject调用的自定义类customClassNSMutableArray *thisArray;

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

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

4

2 回答 2

1

当您使用 ARC 时,当不再有对对象的强引用时,对象将被释放。

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

如果customClass被释放(当没有强引用时会发生这种情况)anotherArray仍然对原始数组有强引用,所以你的数组仍然存在。

于 2013-09-11T23:01:33.747 回答
0

当您anotherArray = customClass.thisArray在根视图控制器中执行此操作时,因为anotherArray是一个强属性,所以引用计数会增加,所以如果customClassde-allocated,您仍然会在内存中有一个数组,该属性指向它。

此外,您可能会发现上面的示例无法编译,因为您不能做anotherArray = customClass.thisArray,您需要做任何一个[self setAnotherArray:[customClass thisArray]]或使用支持变量_anotherArray = [customClass thisArray].

于 2013-09-11T23:10:56.823 回答