为iphone编写程序。意识到我忘了发布一个对象,但实际上没有迹象表明该对象没有被释放,只是工作了。
跟踪此类内容的最佳方法是什么?有没有办法在程序退出时查看内存中仍存在哪些对象?
答案 0 :(得分:12)
答案 1 :(得分:6)
严格地说,当程序退出时,你在内存中留下的内容并不重要:系统会释放应用程序在其生命周期内分配的所有内容。但是,从iOS 4开始,应用程序通常只会在后台被冻结,并且在系统杀死它们以释放内存之前不会退出。为避免这种情况 - 并减少应用程序的内存占用,这在运行时非常重要 - 您应该像Daniel的建议一样,使用Instruments的Leaks工具来检查未正确释放的对象。
答案 2 :(得分:5)
当应用程序退出时,系统会破坏内存中的任何内容(不会被解除分配 - 但只有在地址空间返回给系统时才会彻底销毁)。
虽然其他人建议使用Leaks工具查找应用程序中的泄漏,但Leaks不会发现很多种内存增加。如果一个对象被分配,在某个地方的缓存中被推送,那么缓存中该对象的密钥就会丢失,该对象被有效泄露(永远不能再次使用)但Leaks不会找到它,因为它仍然连接到你可行的对象图。
更好的选择是使用快照分析来查看应用的对象图如何随着时间的推移而增长。我写了一篇你可能觉得有用的tutorial on using Heapshot analysis。
如果您想在应用程序退出之前抓取快照,请在应用程序终止处理程序或应用程序退出之前执行的其他位置将sleep(1000);
放入代码中。
请记住在发运生产版本之前将其删除。 :)
答案 3 :(得分:3)
一旦应用程序退出 - 您无权访问该应用程序。但是Instruments(XCode工具)可以查找内存泄漏。
答案 4 :(得分:3)
当pprogram退出时,内存中没有任何内容。但是,您可以从分析代码(产品 - >分析)开始,然后使用(产品 - >配置文件)分配或泄漏仪器来运行它来查找内存管理问题。