当我们使用类调用alloc
时,我知道Object的计数将为+1。例如:NSObject *obj = [NSObject alloc];
,obj的引用计数为1.我读了源代码,但是我找不到一些可以告诉我为什么alloc
可以添加引用计数的代码。一些博客称alloc
会调用retain
方法,因此它可以+1。但我找不到一些代码可以证明这一点。有人可以告诉我为什么alloc
会添加引用计数吗?
答案 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
返回,保留计数为正数。
(相反,如果参考文献少于一个,则该对象已死亡。)