为什么分配方法可以添加保留计数



当我们用类调用alloc时,我知道对象的计数将+1。例如:NSObject *obj = [NSObject alloc];,obj的引用计数将为1。我阅读了源代码,但我找不到一些代码可以告诉我为什么alloc可以添加引用计数。一些博客说alloc会调用retain方法,所以它可以+1。但是我找不到一些代码可以证明这一点。有人可以告诉我为什么alloc会增加引用计数吗?

找不到在+alloc中添加通用代码。通常在+alloc内部,对象是新创建的,并得到RC 1。(所以你可以说添加了 1,因为对象在创建之前具有 0 的 RC。当然,这在形式上是不正确的,因为在创建之前没有对象,因此它不能有 RC。类似于零是空反模式。

但是,类可以覆盖+alloc以返回现有对象而不是新对象。例如,过去已经这样做以实现单例。在这种情况下,+alloc必须发出新的参考信号(+alloc进行所有权转让(,并且实际上必须添加 1。像这样的东西(示例代码(:

+(id)alloc
{
if(mySingleton==nil) // it is not already created
{
return mySingleton = [super alloc];
}
return [mySingleton retain]; // ownership transfer
}

我认为在某些文章中说"+1"而不是"1"的想法是,您应该单独查看每个参考。所以RC没有绝对值。无论您对引用及其对象做什么,都是相对于您执行之前的情况出于这个原因,一些作者总是用"+1"和"-1"来描述RC。当然,如果对象是新创建的,这是没有意义的。

alloc

不会增加计数。在你调用alloc之前没有任何对象,所以没有什么可算的。该对象通过一个引用而存在,因此它从保留计数为正 1 的alloc返回。

(相反,如果引用少于一个,则对象将失效。

最新更新