【发布时间】: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