我真的把头发拉出来了,似乎我在iOS应用程序上遇到了严重的内存管理问题。
以下是这种情况:首先我加载表格。当用户点击一个单元格时,它会呈现一个复杂的视图。关于视图的最大内存消耗是它加载了20 + 500 {500}的UIImage
s。该视图中还有另外两个选项卡,加载媒体列表(那些UIImage
,然后在表格中)和另一个简单表格。
当我返回到第一个表视图时,仍然在堆上分配了超过250 kB。我知道这个观点很复杂,但是没有理由保持这么多记忆。好吧,猜猜看,当我切换到视图时,最终应用程序耗尽内存并被杀死。
我试图解决它:
init
是否已发布,尽可能使用autorelease
。QuartzCore
)方法/类。另外,我不明白为什么autorelease
没有自动释放。我的意思是,它有时看起来像一个被标记为自动释放的对象,被释放得太晚了。我自己没有创建任何NSAutoreleasePool
,所以只有在运行时停止时池才可能耗尽?我怎样才能定期排水池(即使它不是我的)。
非常感谢任何帮助。
亲切的问候,
雷因德
答案 0 :(得分:2)
您是否使用imageNamed
加载图片 - 此方法会将所有图片缓存在内存中。请改为initWithContentsOfFile
。
注意; initWithContentsOfFile:
根本不会缓存,所以如果你对同一张图片大量使用这种方法,那么你应使用imageNamed:
!
答案 1 :(得分:1)
我认为您可能希望首先尝试优化您的设计并阅读有效的内存管理指南。更好地理解组件和运行时不仅有助于跟踪内存分配,还可以更容易地找到泄漏。