objective-c - removefromsuperview 会释放scrollview 的对象吗?

标签 objective-c iphone xcode memory-management uiscrollview

  for(UIView *subview in [scrollView subviews]) {
    NSLog(@"subviews Count=%d",[[scrollView subviews]count]);
    //[subview release];
    [subview removeFromSuperview];
}

在上面的方法中,如果我使用 [subview removeFromSuperview]; 它工作正常......但是如果我使用 [subview release];它崩溃了..我想知道两者是否相同或者它们之间有什么区别吗?

最佳答案

@MathieuK 是正确的,但值得深入研究,因为它在 ObjC 中是一个非常重要的概念。你不应该在你没有显式或隐式地-retain的对象上调用-release(通过调用Three Magic Words之一)。您不会调用 -release 来释放对象。您调用它来释放对对象的控制。 scrollview 是否保留其 subview 与您无关(它确实保留了其 subview ,但仍然不关您的事)。 -removeFromSuperview 是否调用 -release 也不关你的事。那是在 ScrollView 和它的 subview 之间。重要的是,当您关心对象时保留它们,当您不再关心它们时释放它们,让系统的其余部分负责保留和释放关心的内容。 p>

关于objective-c - removefromsuperview 会释放scrollview 的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1340754/

相关文章:

iphone - Objective-C,使用 UI 事件取消调度队列

iphone - 从 NSDate 获取时间返回 nil

iphone - 使用 OpenGL 在 iPad 上从整数数据集中绘制图像数据

ios - 如何防止作弊者击败 iPhone 游戏的 NSDate?

ios - Cocoapods "pod update"安装旧的 pod

objective-c - 评估 if...else if... block 上的每个条件语句

objective-c - 画一个圆代表剩余时间

javascript - 带有 javascript 代码的 iPhone 应用程序和 uiwebview 我可以访问变量吗?

objective-c - XCode 单元测试中没有这样的模块 <product module name>

ios - 升级到 xcode 4.6 和 iOS 6.1 后出错 "used as the name of the previous parameter rather than as part of the selector"