iOS - 内存管理



iOS 中的内存管理最初是非 ARC(自动引用计数)的,我们需要保留和释放对象。现在,它支持 ARC,我们不必保留和释放对象。Xcode 在编译时自动处理此任务。

内存管理问题

根据 Apple 文档,内存管理中的两个主要问题是:

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

  • 不释放不再使用的的数据会导致内存泄漏。当分配的内存即使不再使用也未被释放时,就会发生内存泄漏。泄漏会导致应用程序使用越来越多的内存,这反过来可能导致系统性能下降或(在 iOS 中)应用程序被终止。

内存管理规则

  • 我们拥有我们创建的对象,并且当不再需要它们时,我们必须随后释放它们。

  • 使用 Retain 获取您未创建的对象的所有权。当不再需要这些对象时,您也必须释放它们。

  • 不要释放您不拥有的对象。

在 ARC 中处理内存

您不需要在 ARC 中使用 release 和 retain。因此,所有视图控制器的对象将在视图控制器被移除时被释放。同样,任何对象的子对象将在它们被释放时被释放。请注意,如果其他类对某个类的对象具有强引用,则整个类将不会被释放。因此,建议对委托使用弱属性。

内存管理工具

我们可以借助 Xcode 工具 Instruments 分析内存的使用情况。它包括活动监视器、分配、泄漏、僵尸等工具。

分析内存分配的步骤

步骤 1 - 打开现有应用程序。

步骤 2 - 选择产品,然后选择分析,如下所示。

iOS Tutorial

步骤 3 - 在下一个屏幕中选择分配,然后选择分析。

iOS Tutorial

步骤 4 - 我们将看到不同对象的内存分配,如下所示。

步骤 5 - 您可以在视图控制器之间切换并检查内存是否已正确释放。

iOS Tutorial

步骤 6 - 同样,我们可以使用活动监视器来查看为应用程序分配的总内存,而不是分配。

iOS Tutorial

步骤 7 - 这些工具帮助我们访问内存使用情况并找到可能发生泄漏的位置。

广告