假设我有一个名为NSObject
的自定义customClass
类,其属性为NSMutableArray *thisArray;
我在根视图控制器中实例化customClass *instance = [[customClass alloc] init]
。在customClass实现中的某处设置thisArray。
现在我的根视图控制器NSMutableArray (strong,nonatomic) *anotherArray
中有一个属性,我通过anotherArray = customClass.thisArray
设置它。如果我然后将customClass设置为nil,anotherArray
是否仍然指向内存中的对象或者是否应该销毁它?剩下的对象及其属性内存怎么样?
答案 0 :(得分:1)
使用ARC时,如果没有对该对象的强引用,则会释放对象。
在您的情况下,customClass
具有强大的属性thisArray
,并且您的视图控制器具有强大的属性anotherArray
。当您将数组分配给customClass.thisArray
并且没有其他强引用时,customClass
会将thisArray
保留在内存中(因为它有强引用)。如果您现在分配anotherArray = customClass.thisArray
,则至少有两个对数组的强引用。
如果customClass
被取消分配(当没有强引用时会发生这种情况)anotherArray
仍然具有对原始数组的强引用,因此您的数组仍处于活动状态。
答案 1 :(得分:0)
当您在根视图控制器中执行anotherArray = customClass.thisArray
时,由于anotherArray
是一个强大的属性,引用计数会递增,因此如果customClass
为de-allocated
,您仍然会有anotherArray = customClass.thisArray
内存中的数组,其属性指向它。
此外,您可能会发现上面的示例无法编译,因为您无法执行[self setAnotherArray:[customClass thisArray]]
,您需要执行_anotherArray = [customClass thisArray]
或使用支持变量{{1}}。