【发布时间】:2012-02-23 21:40:51
【问题描述】:
我需要在我的UIViewController 中加载一些数据,以便在 iPhone 模式视图中显示UIPickerView 小部件。
我做了一些研究,在 SO 中发现了这个 answer。我继续在initWithNibName:bundle: 中实现我的数据读取代码,并在dealloc 中实现数据卸载。但是,Instruments 一直告诉我在重复显示模态视图时存在内存泄漏,并且在调试过程中我注意到每次显示视图时都会调用 initWithNibName:bundle:,但在正常执行下从未调用 dealloc(尽管它是由低触发- 根据 Apple 的 UIViewController Class Reference 文档的内存条件,同样适用于 viewDidUnload)。
我最终在viewDidLoad: 方法中加载数据并在viewDidDisappear: 中发布它,小部件显示数据并且没有泄漏。但是,我想知道这方面是否有任何好的做法,因为在 Apple 文档中的一条评论中提到了这一点:
您不应使用此方法(即 viewDidUnload)来释放用户数据或任何其他无法轻松重新创建的信息。
我认为正确的方法是在 viewDidLoad 中加载数据并在 viewDidUnload 中释放对它的所有引用,但实际上,除非出现内存不足的情况,否则不会调用后一种方法,因此每次显示视图时,数据再次加载,对旧数据的引用丢失,导致内存泄漏。
感谢您的 cmets。
【问题讨论】:
标签: objective-c ios memory-management memory-leaks