博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高级内存管理编程指南-关于内存管理
阅读量:3592 次
发布时间:2019-05-20

本文共 1181 字,大约阅读时间需要 3 分钟。

 

重要提示:  此文档不再更新。有关 Apple SDK 的最新信息,请访问。

 

应用程序内存管理是在程序运行时分配内存,使用它并在完成后释放内存的过程。编写良好的程序使用尽可能少的内存。在 Objective-C 中,它还可以被看作是在许多数据和代码之间分配有限内存资源的所有权的一种方式。完成本指南后,您将掌握管理应用程序内存所需的知识,方法是明确管理对象的生命周期,并在不再需要时释放它们。

虽然内存管理通常被视为单个对象的级别,但您的目标实际上是管理对象图。您希望确保内存中没有比实际需要的对象更多的对象。

../Art/memory_management_2x.png

乍看上去

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

  1. 在本指南中描述的方法(称为 “手动保留 - 释放” 或 MRR)中,您通过跟踪您拥有的对象来明确管理内存。这是使用一个称为引用计数的模型实现的,Foundation 类 与运行时环境一起提供。

  2. 在自动引用计数或 ARC 中,系统使用与 MRR 相同的引用计数系统,但它在编译时为您插入适当的内存管理方法调用。强烈建议您将 ARC 用于新项目。如果您使用 ARC,通常不需要理解本文档中描述的底层实现,尽管在某些情况下它可能会有所帮助。有关 ARC 的更多信息,请参阅

良好实践可防止与内存相关的问题

内存管理不正确导致两种主要问题:

  • 释放或覆盖仍在使用的数据

    这会导致内存损坏,并且通常会导致应用程序崩溃,甚至导致用户数据损坏。

  • 不释放不再使用的数据会导致内存泄漏

    内存泄漏是未释放已分配内存的地方,即使它从未再次使用过。泄漏会导致应用程序使用不断增加的内存量,从而导致系统性能下降或应用程序被终止。

但是,从引用计数的角度考虑内存管理通常会适得其反,因为您倾向于根据实现细节而不是实际目标来考虑内存管理。相反,您应该从对象所有权和对象图的角度考虑内存管理。

Cocoa 使用简单的命名约定来指示您拥有方法返回的对象的时间。

请参阅。

虽然基本策略很简单,但您可以采取一些实际步骤来简化内存管理,并帮助确保您的程序保持可靠和健壮,同时最大限度地减少其资源需求。

请参阅。

自动释放池块提供了一种机制,您可以通过该机制向对象发送 “延迟” release消息。这在您想要放弃对象的所有权但希望避免立即释放它的可能性(例如从方法返回对象时)的情况下非常有用。有时您可能会使用自己的自动释放池块。

请参阅。

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

要在编译时识别代码问题,可以使用 Xcode 中内置的 Clang Static Analyzer。

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

  • 许多工具和技术都在技术说明 TN2239,进行了描述,特别是使用NSZombie帮助查找过度释放的对象。

  • 您可以使用 Instruments 跟踪引用计数事件并查找内存泄漏。请参阅。

转载地址:http://oqhwn.baihongyu.com/

你可能感兴趣的文章
[2008年NOIP普及组] ISBN号码
查看>>
[2010年NOIP普及组] 数字统计
查看>>
计算多项式的值
查看>>
甲流疫情死亡率
查看>>
计算并联电阻的阻值
查看>>
计算三角形面积
查看>>
计算线段长度
查看>>
大象喝水
查看>>
Java 查找特定的值
查看>>
Java 向量点积计算
查看>>
C语言 数组逆序重放
查看>>
统计字符数
查看>>
吝啬的国度
查看>>
7-4 二进制数转十进制数(20 分)
查看>>
6-3 '字符串02-字符串复制(赋值) (10 分)
查看>>
6-4 带头结点的链式表操作集 (20 分)
查看>>
7-1 字符串替换 (15 分)
查看>>
MySQL的简单操作命令
查看>>
6-1 求二叉树高度 (20 分)
查看>>
7-4 找最小的字符串 (15 分)
查看>>