1

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

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

NOTE : I am working on ARC based project
4

4 回答 4

4

你可以通过这个在 iOS 应用程序中查找内存泄漏

在 App 中定位内存问题

在此处输入图像描述

以下配置选项通过活动监视器提供特定于内存的信息

  • 物理内存有线
  • 物理内存活动
  • 物理内存不活动
  • 使用的物理内存
  • 可用物理内存
  • 虚拟机总大小
  • 虚拟机页面(以字节为单位)
  • 虚拟机页面输出字节
  • 使用的虚拟机交换

发现泄漏

在此处输入图像描述

定位泄漏内存 打开泄漏仪器。

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

单击录制按钮。

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

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

在 Extended Detail 窗格中,双击代码中的指令。

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

于 2013-07-01T13:27:15.067 回答
0

即使您在启用 ARC 的环境中工作,您也需要以正确的方式管理内存分配。
例如,永远不要使用strong参考分配您的对象,什么时候weak会这样做。考虑在正确的地方使用 also copy, assignreferences。
在你完成它们之后,将你的对象指向 nil 也会有所帮助。

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

于 2013-07-01T13:13:54.720 回答
0

使用仪器。教程很多,这里有一个。

于 2013-07-01T12:56:01.317 回答
0

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

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

上面的许多事情也可以用 sqlite 来完成,但你需要自己制定机制来做到这一点。

使用仪器检查您是否没有泄漏任何内存。如果您正在下载启用缓存的内容,[[NSURLCache sharedURLCache] removeAllCachedResponses] 以释放一些内存

于 2013-07-01T13:15:29.230 回答