2017-03-15 65 views
2

所有权在过去的时间我试图意识到Objective-C的内存管理,一旦我问自己以下问题:争议与目标C

由于weak参考Objective-C的让我们避免保留周期为什么不一直使用它们?

+1

如果一切都很微弱,就没有任何东西会引用任何东西,所有的对象都会立即消失。 – rmaddy

+2

顺便说一句 - 你指的是什么“争议”? – rmaddy

+0

@rmaddy,这意味着如果我使用弱引用创建两个指向其他对象的对象,它们将立即消失? – user3524337

回答

3

一个对象只保留在内存中,而至少有一个对它的强(默认)引用。如果您只使用弱引用,则该对象将立即解除分配。

简单地说,“弱”意味着:这个对象属于别人,我只能访问它,我不介意它是否消失。

2

Objective-C中的Weak引用让我们避免保留周期,为什么不一直使用它们?

因为只要没有强引用,对象就会被释放。

更重要的是,为防止对象的重新分配,通常需要强大的引用。例如,视图控制器最终对其视图负责 - 让控制器的视图突然消失是没有多大意义的。所以UIViewController的view属性很强大。

保留周期发生在两个对象各自具有强引用时。只要另一个对象保持强引用,任何对象都不能被释放。如果你意识到这种情况,这并不是一个问题,因为你可以通过消除任一参考来打破保留周期。然而,很容易让而不是意识到这个循环,或忘记处理它,然后你有两个对象在超出其使用寿命的时间内保持在内存中。使这些引用中的一个弱化可以消除这个问题,但这也意味着被引用的对象可能会被释放,并且引用可能在任何时候都成为零。实际上,这通常不是问题。