Contents
  1. 引言(Introduction)
    1. 关于内存管理(About Memory Management)
  2. 一眼看去
  3. 良好的做法防止内存相关的问题
  4. 使用分析工具来调试内存问题

引言(Introduction)


关于内存管理(About Memory Management)

应用程序的内存管理是程序在运行时分配内存的过程,运行它,使用完时将其释放。一个好的程序将使用尽可能小的内存。在Objective-C中,它也可以被视为多个数据和代码分配有限内存资源的所有权。当您学习完本指南时,你将有拥有所需要的管理你应用程序内存的知识,如清楚地知道如何管理对象的生命周期,并在它们不再使用时释放掉。

虽然内存管理通常在考虑一个单独的对象的层次,但是你的目标实际上是管理对象的整个周期图表。你要确保在内存中没有不需要的对象。

memory_management_2x.png


一眼看去

Objective-C提供了两种应用程序的内存管理方法。

  1. 在本指南中描述的方法,称为“手动保留释放”或MRR,您通过跟踪你的对象来明确地管理内存。这是用一个模型来实现,称为引用计数,结合运行时环境,由基础框架类NSObject所提供。
  2. 自动引用计数,或者ARC,该系统使用相同的引用计数系统MRR,但它会在编译期为你插入适当的内存管理方法调用。强烈建议在新项目中使用ARC。如果您使用的是ARC,通常不需要了解本文档中所描述的基本实现方法,尽管它可能在某些情况下是有用的。更多关于ARC,参考过渡到ARC释放笔记


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

有2种主要的问题会产生不正确的内存管理

  • 释放或重写还仍在使用的数据
    这会导致内存损坏,通常会导致应用程序崩溃,或更糟糕的是,用户的数据被损坏。

  • 不再使用的数据未及时释放掉,导致内存泄漏
    内存泄漏是指已分配的却未被释放掉的内存,即便它再也不会被使用。内存泄漏将导致您的应用程序内存占用量不断增加,这反过来可能导致系统的性能不佳,您的应用程序可能会被关闭。

从引用计数(ARC)的角度来思考内存管理,往往适得其反,因为你倾向于考虑内存管理方面的实施细节,而不是你的实际目标。其实,你应该从对象所有权和对象图的角度来考虑内存管理。

Cocoa使用一个简单的命名规则来表示当你持有一个方法所返回的对象。

参考内存管理策略

基本策略看起来简单,然而有一些实用的步骤提供给,它们将使内存管理更容易,并帮助确保您的程序仍然是可靠和健壮的,同时,最大限度地减少所占用的资源。

参考实际的内存管理

自动释放池中提供了一种机制,你可以把一个对象的释放消息“推迟”。这是有用的情况下,你想放弃一个对象的所有权,但要避免它立刻释放(如你从一个方法返回一个对象时)。有些时候你可能会使用自己的自动释放池块。

参考使用自动释放池


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

查找代码在编译时的问题,你可以使用Xcode内部的Clang静态分析器。

很多工具和技术的阐述在技术文档TN2239中,而iOS调试魔法介绍关于使用NSZombie找到”过度释放”对象。

  • 如果内存管理问题仍然出现,有其他的工具和技术可以用来识别和诊断这些问题。

  • 您可以使用Instruments来追踪引用计数事件,并查找内存泄漏。参考收集你应用程序的数据

原文:引言(Introduction)

Contents
  1. 引言(Introduction)
    1. 关于内存管理(About Memory Management)
  2. 一眼看去
  3. 良好的做法防止内存相关的问题
  4. 使用分析工具来调试内存问题