Rah*_*yas 11 iphone xcode memory-management objective-c uiscrollview
  for(UIView *subview in [scrollView subviews]) {
    NSLog(@"subviews Count=%d",[[scrollView subviews]count]);
    //[subview release];
    [subview removeFromSuperview];
}
在上面的方法,如果我使用   [subview removeFromSuperview];它工作正常...但如果我使用[subview release];它崩溃.. 我
 想知道,如果两者相同或它们之间有什么区别?
Rob*_*ier 29
@MathieuK是正确的,但值得深入研究,因为它是ObjC中一个非常重要的概念.你永远不应该调用-release你没有-retain明确或暗示的对象(通过调用三个魔术词之一).您不需要调用-release以释放对象.你调用它来释放你放在对象上的保持.scrollview是否保留其子视图不是您的业务(它确实保留其子视图,但它仍然不是您的业务).无论-removeFromSuperview电话-release也没有您的业务.这是在scrollview及其子视图之间.重要的是你在关心它们时保留物品,当你停止照顾它们时释放物体,并让系统的其余部分负责保留和释放它所关心的物体.
NSS*_*Sec 10
子视图的保留计数可能为1.当您调用[subview release];保留计数变为0并且子视图从内存中释放时.随后对子视图(调用removeFromSuperview)的访问崩溃,因为子视图不再存在.
在这种情况下,您应该调用[subview removeFromSuperview]因为removeFromSuperview将调用release子视图本身.
| 归档时间: | 
 | 
| 查看次数: | 18780 次 | 
| 最近记录: |