内存管理简介

我用objective-c编写程序,并一般地编程,我发现自己在问一个问题:“所有这些对象会发生什么? 他们去哪里? 这些问题的答案通常是内存,或更具体地说是内存管理。 根据调用对象的时间以及是否需要它们来创建和销毁对象。 我发现您的计算机可以通过两种不同的方式来管理内存:ARC vs MMR。

ARC —简短摘要

首先,让我们谈谈ARC,也就是自动引用计数。 内存管理是一项非常单调的任务,因此ARC负责处理程序中所有必要的烦人方法调用。 它的工作效率非常高,并为开发人员提供了更多时间来处理其项目中更重要的方面。 更不用说减少代码量和保持可读性。

MRR-这是什么?

MMR代表“手动保留释放”,通常您不需要担心。 但是,稍微试用一下以了解计算机在幕后如何运行以及做什么(可能会感觉到在ARC之前进行手动内存管理的痛苦)可能是有益的。

单击项目导航器中的项目图标,确保选择了“构建设置”选项卡,然后开始在搜索栏中键入自动引用计数。 应显示“ Objective-C自动引用计数”编译器选项。 将其从“是”更改为“否”。—从Ry的Objective C内存管理教程中

创建对象并保留控制权

我们都使用过alloc,但是也许您想知道它到底在做什么? 好吧,当您编写一个新的类文件时,您实际上并没有在创建对象……而是在编写如何创建该对象的蓝图。 正如您可能自己发现的那样,只有当您实际调用方法或类时,任何事情都完成。

那么,当我调用一个类的实例时会发生什么? 确切地说,您创建了可以修改的对象实例。 例如,当您调用alloc类方法时,您是在告诉计算机您正在创建要声明其所有权的对象。 这告诉计算机“哦,太好了,有1个物体飞到了! 全是你的!”。 但是,问题是在使用完该对象后将其放置在身边。 就像一个孩子遗弃玩具供所有人踩踏一样,如果遗留下太多“玩具”,计算机将跳闸。

进入内存管理-如前所述,当您创建过多的对象实例而没有正确处置它们时,计算机会遇到称为内存泄漏的情况。 如果不加以检查,尤其是在循环中创建太多对象的情况下,这会造成问题,因为这将耗尽所有可用内存并导致项目崩溃。 这导致我们讨论如何处理这些对象。

内存管理方法

上图显示了内存管理所需的方法调用,以及在编写项目时ARC自动使用的方法。

自动发布与发布

关于内存管理,自动释放告诉计算机放弃对某个对象的所有权,但是将其破坏推迟到程序完全确定可以安全地破坏它之前。 本质上,您的程序只是一堆指向引用的指针,而自动释放功能可确保在销毁给定对象之前不留任何指向该对象的指针。

Release告诉您计算机已完成创建的对象的处理,然后立即销毁它,这可能会在以后产生效率问题,尤其是在有其他调用对象的情况下,因此需要重新创建。 不断地重新创造/破坏物体就像将它们留在身边一样低效。

结论

内存管理最重要的方面是它是一种平衡行为。 必须创造的东西,最终也必须销毁。 对于现代计算机,内存泄漏相对来说是微不足道的,但是如果您没有按照预期的方式适当地管理内存,则最终可能会导致效率低下或程序运行缓慢。

整体内存管理是一个有趣的话题,但涉及到的深度也很大。 一般而言,我只对内存管理进行了初步调查,但是将来一定会做更多的研究,因为学习它的复杂性肯定有其价值。 希望您喜欢阅读。