自动引用计数

为了了解ARC,您需要了解一些基本知识。
首先,我想让您了解这些基础知识。

结构和枚举的实例按值传递

在这里,我们将string1存储在变量str1中 。 然后,我们将str1的值分配给str2在幕后,将str1的值复制并存储在str2中 。 这意味着将单独的值存储在str1str2中这些值相等,但是在内存中它们是不同的。 这就是通过价值传递的意义 。 将str1的值分配给str2时 ,它按值传递。

类的实例通过引用传递

当我们将person1分配给person2时 ,不会复制存储在person1中的值。 而是将存储在person1中的Person实例的引用分配给person2 。 这意味着person1person2指向同一个Person实例。 内存中仅存在 Person 类的 一个实例

强引用(ARC计算引用

当父对象引用子对象时,应使用强引用,而不是相反。 也就是说,子类不应强烈引用父类。

弱引用和无主引用(ARC不计算引用)

无主(值是强制性的):—将始终具有值,但不会由自己拥有

弱(值是可选的):-仅当其他人强烈引用该值时才具有值

只要有效的引用在其生命周期中的某个时刻变为零就使用弱引用。 相反,当您知道在初始化期间将其设置为零时,请使用无主引用。

弱引用不能永远是常量,因为它需要能够变异

ARC的基本思想很简单。 它跟踪类实例,并确定何时可以安全地释放其监视的类实例。 它通过计算每个类实例的引用来实现。

在第一个图像中,我们创建了该人的两个实例,因此该处的引用计数为2。

在一秒钟后,我们将person1设为nil,因此引用计数递减并变为1,但是由于这个1 Person类仍然存在,即在内存中。

如果我们使person2也为零,则ARC将释放该人员实例占用的空间,因此该实例将不再可用。

Interesting Posts