我真的很担心这个问题,似乎我在 iOS 应用程序的内存管理方面遇到了严重问题。
情况如下:首先我加载表。当用户点击一个单元格时,它会呈现一个复杂的 View 。 View 最消耗内存的是它正在加载 20+ UIImage
s 为 500x500。该 View 中还有另外两个选项卡,加载一个媒体列表(那些 UIImage
s,但随后在一个表格中)和另一个简单表格。
当我返回到第一个 TableView 时,显然仍然在堆上分配了超过 250 kB。我知道这个观点很复杂,但没有理由让这么多内存保持活力。好吧,你猜怎么着,当我经常切换到 View 时,最终应用程序会耗尽内存并被杀死。
我试图解决的问题:
init
s 再次用于释放,利用 autorelease
在可能的情况。 QuartzCore
)方法/类。 另外,我不明白为什么
autorelease
不是自动发布。我的意思是,它有时看起来像是一个标记为自动释放的对象,但发布得太晚了。我还没有创建任何 NSAutoreleasePool
s 我自己,那么是否有可能仅在运行时停止时才耗尽池?我怎样才能定期排空游泳池(即使它不是我的)。任何帮助是极大的赞赏。
亲切的问候,
莱德
用于堆检查:http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-undesirable-memory-growth/
最佳答案
您在使用 imageNamed
加载您的图像 - 此方法会将所有图像缓存在内存中。试试 initWithContentsOfFile
反而。
不过要小心; initWithContentsOfFile:
根本不会缓存,所以如果你对同一张图片经常使用这种方法,那么你应该使用 imageNamed:
!
关于objective-c - 内存管理、自动释放、永久堆的问题在 iOS 上有时是 250+ kb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8898009/