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

时间:2017-07-17 17:27:36

标签: objective-c memory-management

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

2 个答案:

答案 0 :(得分:1)

您找不到在+alloc中添加一个的通用代码。通常在+alloc内部,新创建对象并获取RC 1.(因此可以说添加了1,因为创建之前的对象的RC为0.当然,这不正式,因为在创建之前没有对象,因此它不能有RC。类似零是null反模式。)

但是,类可以覆盖+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"来描述RC。和" -1"。当然,如果新创建了一个对象,这是没有意义的。

答案 1 :(得分:0)

alloc不会增加计数。在您致电alloc之前,没有任何对象,因此无需计算任何内容。该对象以一个引用形式存在,因此它从alloc返回,保留计数为正数。

(相反,如果参考文献少于一个,则该对象已死亡。)