您的位置:首页 > 移动开发 > IOS开发

iOS内存管理高级指南(官方文档——译文)

2013-11-16 12:40 239 查看

iOS内存管理高级指南

应用程序内存管理是:“程序运行时,开辟的内存空间。使用它,释放它”的过程,写的好的程序尽可能少使用内存。在Objective-C中,内存管理被看做是:“在很多数据、代码下,分配受限内存资源所有权方法”。当你依据这个指南完成你的程序时,你将获得“通过显式管理对象的命周期,不使用的时候释放他们,来管理程序内存”的知识。

尽管,典型的内存管理是作用于单个对象,你的目标是通过管理对象图。你想确保:在内存中没有比实际需要的还多的对象。



概述

Objective-C提供两种内存管理的方法:

1.”manual-release“(MRR),需要显式管理内存通过跟踪对象的所有权。MRR基于NSObject类在运行时提供的引用计数实现的。

2.”Automatic Reference Counting“ARC,系统使用相同的引用计数基于MRR,但是在编译时,为开发者适当插入一些内存管理方法。强烈建议开发者在新项目中使用ARC。使用ARC就无需理解本文所描述的内容了。

防止内存相关问题的好的做法

两个主要的内存管理误用问题

1.释放或覆盖正在使用的数据。

这将造成内存损坏,造成应用程序崩溃,或者更坏的情况是损坏用户数据。

2.没有释放数据,导致内存泄露。

泄漏导致应用程序的内存使用量逐渐增加,这反过来又可能会导致系统性能较差或者应用程序被终止(crash)

引用计数内存管理的角度思考,但是,往往是适得其反,因为你往往会考虑内存管理方面的实现细则,而不是在你的实际目标。相反,你应该想到的内存管理对象所有权和对象图的角度。

● Cocoa使用简单的命名惯例来指示,是否拥有函数返回的对象。点击查看内存管理策略

● 尽管内存管理基本策略很简单,有一些实际的步骤,你可以使内存管理更轻松,有助于确保你的程序仍然可靠和稳定的,而在同一时间最大限度地减少资源需求。点击查看内存管理实践

● Autorelease pool 提供一种机制:让对象延迟release。这个对你想放弃所有权,但又想避免立即释放(比如函数的返回值)。有些时候,你可能会使用自己的autorelease池块,点击查看自动释放池

使用分析工具来调试内存问题

在编译时候找出代码的问题。使用Xcode内嵌的Clang Static Analyzer

如果内存管理的问题仍然发生,还有其他的工具和技术,你可以用它来识别和诊断问题。

● 多数工具和技术都在TN2239中有描述,iOS Debugging Magic 特别是NSZombie来帮助找到过度释放对象。

● 使用Instruments来追踪引用计数事件并找到内存泄露。( 参考
Collecting Data on Your App待翻译)

点击查看原文地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: