【问题标题】:Issue with view controller not releasing memory视图控制器不释放内存的问题
【发布时间】:2012-10-03 21:19:23
【问题描述】:

我正在开发一个应用程序,其中不同的视图控制器通过dismissModalViewControllerAnimated 被推送和关闭。

我遇到了一些内存问题,应用程序在一段时间后就崩溃了。查看泄漏工具,我发现我的整体分配不断增加。即使关闭视图控制器,内存也不会下降。

这有什么明显的原因吗?找出我的应用程序崩溃原因的最简单和最简单的方法是什么?谢谢

可能的解决方案

我经历了一些试验和错误以及谷歌搜索并进行了一些更改:

1)委托关系可能一直保留viewController,所以我将对象的委托属性改为weak。

2) NSTimer 应该在关闭 viewController 之前失效。

3) UIView 动画可能会干扰 dealloc 的调用?您可以在弹出视图控制器之前使用[view.layer removeAllAnimations] 结束它们。

【问题讨论】:

  • 尝试运行分析,看看是否有任何结果。此外,附带说明 dismissModalViewControllerAnimated 已弃用,请使用 [self dismissViewControllerAnimated:<(BOOL)> completion:<^(void)completion>];
  • 谢谢,Analyze 没有找到任何东西,我现在正在使用新的解除方法。还有其他想法吗?
  • 然后,确认是否正在调用dealloc(例如通过NSLog 或断点。如果没有,则可能是强引用循环或其他循环逻辑。如果不是,那么您可能想用仪器确认是否泄漏,究竟是什么泄漏。抽象的诊断是不可能的。你需要给我们关于究竟是什么泄漏的线索。
  • 顺便说一句,如果你使用像imageNamed 这样缓存图像的东西,内存使用不会下降。我们应该尝试区分内存消耗、泄漏和强引用循环。另外,我假设您已经通过静态分析器运行代码并且那里没有警告。
  • @Rob 好主意,我可以确认没有调用 dealloc,这是否意味着 viewController 中的对象没有被正确释放?另外,使用 imageNamed 的另一种方法是什么?谢谢

标签: iphone objective-c ios xcode


【解决方案1】:

如果你的内存在dismissModalViewControllerAnimated 之后没有下降.. 这意味着你正在创建ViewControllerGlobal Object 而在dismissing 之后你没有设置Object = nil;

如果您设置 nil,那么您的内存会自动下降。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多