Apps 需要尽量少的使用内存,以使系统保存更多的 Apps 在内存当中和提供个前台 APP 更多的使用内存。系统的空闲内存和 APP 的性能是紧密联系的,可用内存越少意味着系统在完成未来的内存请求的时候将更有可能遇到问题。我们应该最小化内存的使用且在接受到内存低警告是要主动相应释放内存。
观察低内存警告
当收到系统发出低内存警告时应该立即反应,释放不需要的对象。未相应的 APP 更有可能被系统终止。以下的方式通知APP:
app delegate 的applicationDidReceiveMemoryWarningmethod
UIViewController类的didReceiveMemoryWarning]method
UIApplicationDidReceiveMemoryWarningNotification notification.
DISPATCH_SOURCE_TYPE_MEMORYPRESSURE 这是唯一反应内存压力严重程度的方法。
减少内存占用空间
以少量内存开始可以有更多的空间来扩充。有以下 tips:
- 消除内存泄漏 :内存是重要资源,应该避免。可以使用Instruments工具。
- 让资源文件尽量小:文件虽然放在磁盘上,但是在使用的时候要加载到内存,所以要将所有文件压缩到尽可能小。(png 是最好的图片格式,且可以使用pngcrush工具压缩)。可以使用property list文件,这比NSPropertyListSerialization类产生的二进制对象更小。
- 使用Core Data or SQLite 存储大数据集:这两者提供有效的方法管理数据集且不需所有的数据集同时加载到内存中。
- 懒加载资源:应该在资源实际使用的时候才加载资源。预加载资源看起来会节约时间,但是其实际上减缓了目前APP 的执行。另外,要是加载后没有使用也会浪费资源和内存。
合理的分配内存
- 利用资源的大小限制 :,如果小的资源文件就可以满足需要,就
避免加载一个大文件。使用一个合适 iOS设备的大小图片而不是使用一个高分辨率的图片。如果你必须使用一个大文件,你可以在一个时间内只加载它的一部分。例如:使用mmap和 munmap 函数映射图片的一部分到内存当中。 - 避免Unbounded problem sets :Unbounded problem sets 可能需要大量的内存用于计算,如果超过了系统可用的内存,将不能够进行计算。