iOS Objective-C内存足够删除元素(弧对子元素的影响)

iOS Objective-C内存足够删除元素(弧对子元素的影响),ios,objective-c,uiview,memory-leaks,automatic-ref-counting,Ios,Objective C,Uiview,Memory Leaks,Automatic Ref Counting,使用removeFromSuperview删除UIView时,ARC是否正确处理UIView的子元素的dealloc 例如: 如果未收到记忆警告: [myView removeFromSuperview]; 将[myView从SuperView移除]足以删除myView的子元素(myLabel),还是应该同时删除子元素 作为一个附带问题:myView除了从superview中删除之外,是否应该设置为nil,或者ARC处理它?是。对象的强属性在对象被释放时被释放。对于视图的子视图数组,这将是正确

使用
removeFromSuperview
删除
UIView
时,ARC是否正确处理
UIView
的子元素的
dealloc

例如:

如果
未收到记忆警告

[myView removeFromSuperview];
[myView从SuperView移除]
足以删除
myView
的子元素(
myLabel
),还是应该同时删除子元素


作为一个附带问题:
myView
除了从superview中删除之外,是否应该设置为
nil
,或者ARC处理它?

是。对象的强属性在对象被释放时被释放。对于视图的
子视图
数组,这将是正确的。由于数组的元素在释放数组时被释放,因此这些子视图也将被释放。执行所有这些操作的代码都是通过圆弧插入的

请记住,释放只会减少对象的引用计数。对象在其引用计数达到零之前不会被释放。这意味着,如果有其他指向子视图的强指针保留在其他位置,则子视图将保留

所以

但是

[someView addSubview:someSubview];
someObject.strongProperty = someSubview;

[someView removeFromSuperview];  // will free someView's subviews
// but not someSubview, which is now retained elsewhere

对。对象的强属性在对象被释放时被释放。对于视图的
子视图
数组,这将是正确的。由于数组的元素在释放数组时被释放,因此这些子视图也将被释放。执行所有这些操作的代码都是通过圆弧插入的

请记住,释放只会减少对象的引用计数。对象在其引用计数达到零之前不会被释放。这意味着,如果有其他指向子视图的强指针保留在其他位置,则子视图将保留

所以

但是

[someView addSubview:someSubview];
someObject.strongProperty = someSubview;

[someView removeFromSuperview];  // will free someView's subviews
// but not someSubview, which is now retained elsewhere

如果
myView
是一个局部变量,如您在此处所示,则无需将其设置为nil-一旦超出范围,它的引用将被删除。如果它是
strong
属性或iVar,则需要将其显式设置为
nil
。通常情况下,
引用与父视图一起使用,父视图仅持有
引用。因此,如果
myView
是一个局部变量,如您在此处所示,则无需将其设置为nil-一旦超出范围,它的引用将被删除。如果它是
strong
属性或iVar,则需要将其显式设置为
nil
。由于这个原因,通常
引用与父视图一起使用,父视图只保存
引用
[someView addSubview:someSubview];
someObject.strongProperty = someSubview;

[someView removeFromSuperview];  // will free someView's subviews
// but not someSubview, which is now retained elsewhere