如何释放不必要的应用程序内存,这是不必要的?

时间:2013-07-01 12:39:32

标签: ios memory-management

使用15-20分钟后,我的应用程序占用了大约50-60 MB的内存,因为有很多数据库操作。

所以,任何人都可以告诉我如何释放我的应用程序的不必要的内存,这是不必要的?

NOTE : I am working on ARC based project

4 个答案:

答案 0 :(得分:4)

您可以浏览此Finding Memory Leaks in iOS Application

在App中查找内存问题

enter image description here

以下配置选项通过活动监视器

提供特定于内存的信息
  • 有线物理内存
  • 物理内存有效
  • Physical MemoryInactive
  • 使用的物理内存
  • 无物理内存
  • 总VM大小
  • 虚拟页面字节
  • VM Page Out Bytes
  • 使用VM交换

发现泄漏

enter image description here

找到泄漏的内存 打开Leaks仪器。

从“选择目标”弹出菜单中选择您的应用程序。

单击“录制”按钮。

练习您的应用以执行代码,并在显示泄漏时单击“停止”按钮。

单击“详细信息”窗格中标识的任何泄漏对象。

在“扩展详细信息”窗格中,双击代码中的指令。

单击“详细信息”窗格中的Xcode图标以在Xcode中打开该代码。

答案 1 :(得分:0)

使用仪器。有很多教程,here就是一个。

答案 2 :(得分:0)

即使您在启用ARC的环境中工作,也需要以适当的方式管理内存分配 例如,在strong执行此操作时,永远不要使用weak引用分配您的对象。请考虑在正确的位置使用copyassign引用。
在你完成它们之后,还要将你的物体指向零,这将有所帮助。

http://www.techrepublic.com/blog/ios-app-builder/understand-memory-management-under-arc/239

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

答案 3 :(得分:0)

如果对象对用户不可见,请不要将对象保留在内存中,尤其是它有blob对象。 尝试用Core Data替换sqlite。它有很多优点,比如

  • 关系是对象不是自动提取的
  • 除非您尝试询问特定记录的blob信息,否则不会获取Blob
  • NSFetchRequestController允许您一次性获取分页中的抓取页面
  • 如果您收到内存警告,您可以随时重置NSManagedContext对象,您需要再次查询这些故障对象。只需使用对象ID重新生成对象

上面的许多内容也可以使用sqlite完成,但是你可以自己制定机制。

使用仪器检查是否有任何内存泄漏。如果你正在下载启用了缓存的东西,[[NSURLCache sharedURLCache] removeAllCachedResponses]来释放一些内存