【问题标题】:UIViewControllers... Memory Management With SubViewsUIViewControllers... 使用子视图进行内存管理
【发布时间】:2012-02-04 02:27:51
【问题描述】:

我有UIViewController,他有几个子视图,但跟踪分配的每个子视图是一项艰巨的任务,因为实际编码器不是我,需要处理内存消耗。

我的问题是有没有办法控制内存调用递归函数来删除和释放UIViewController 中的所有子视图而不知道实际的引用名称?

如下代码:

for (UIView* subview in view){  
    [subview removeFromSuperView];  
    [subview release] ;
    subview = nil;   
}

【问题讨论】:

  • 你贴的代码 sn-p 有什么问题?

标签: iphone objective-c ios memory uiviewcontroller


【解决方案1】:

当您在视图上调用 removeFromSuperview 时,它会自动减少保留计数(因为超级视图不再需要对您刚刚删除的视图的引用)。

如果您以标准方式将视图添加到超级视图,则无需执行您正在执行的操作 - 要么添加视图然后释放它们,要么您的视图是属性和释放发生在以后。

您提出的代码(所有子视图上的递归循环)是一个坏主意,因为您实际上并不知道您的子视图是否可以安全释放。您很容易触发错误访问。

【讨论】:

  • 添加到@lxt,removeFromSuperview 将减少保留计数,但不保证它会变为零。当您的MainView(从您调用上述循环的位置)被释放时,它将释放它的子项(视图已保留);不需要 for 循环。
  • 你能分享一些removeFromSuperView的链接
  • 有没有办法在收到内存警告时释放未使用的视图??
  • 你能分享一些 removeFromSuperView 的链接吗?还有什么方法可以在收到内存警告时释放内存。无论如何,我们可以通过它从清除/缓存数据中释放未使用的视图....
猜你喜欢
  • 2010-09-20
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
相关资源
最近更新 更多