- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在我的 UIViewController
中加载一些数据以在 iPhone 模态视图中显示 UIPickerView
小部件。
我做了一些研究,发现了这个 answer所以。我继续在 initWithNibName:bundle:
中实现我的数据读取代码,并在 dealloc
中实现数据卸载。然而,Instruments 一直告诉我在重复显示模态视图时存在内存泄漏,并且在调试过程中我注意到每次显示 View 时都会调用 initWithNibName:bundle:
,但在正常情况下从未调用过 dealloc执行(尽管根据 Apple 的 UIViewController Class Reference 文档,它是由低内存条件触发的,这同样适用于 viewDidUnload
)。
我最终在 viewDidLoad:
方法中加载数据,并在 viewDidDisappear:
中释放它,小部件显示数据并且没有泄漏。但是,我想知道这方面是否有任何好的做法,因为 Apple 文档中的一条评论提到了这一点:
You should not use this method (i.e. viewDidUnload) to release user data or any other information that cannot be easily recreated.
我认为正确的方法是在 viewDidLoad 中加载数据并在 viewDidUnload 中释放对它的所有引用,但实际上除非出现低内存情况,否则不会调用后一种方法,因此每次显示 View 时,数据再次加载,对旧数据的引用丢失,导致内存泄漏。
感谢您的评论。
最佳答案
如果每次显示您的 View 时都调用 viewDidLoad
,就会发生不好的事情。 viewDidAppear
应该被调用,但是 viewDidLoad
应该只在第一次需要 View 时调用,如果需要 View 并且 viewDidUnload
被调用。
关于objective-c - 在 UIViewController 中加载和卸载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9421780/
我是一名优秀的程序员,十分优秀!