当我们用类调用alloc时,对象的引用计数是否为1.例如:NSObject *obj = [NSObject alloc]
;,执行此行代码后,对象的引用计数为0还是1?我阅读了源代码,我无法找到一些alloc
方法的代码,用于引用计数的任何操作。如果引用的对象数为0,则对象将被销毁,如果是1,那么它是如何实现的,是否有人可以帮助解决混乱,谢谢!
答案 0 :(得分:0)
在MRC模式下,alloc
方法创建对象,引用计数将计算为1.表示类创建了对象并保留它。
如果在方法中创建本地对象,并忘记释放它,则内存将被泄露。您需要手动释放它:[obj release];
。
Ocne一个对象分配,没有将retain count设置为1的操作。因为如果没有其他类保留该对象,计算引用计数的方法将返回1。如果另一个对象保留当前对象,则当前对象的引用表将保存该保留。然后通过计算增加结果。方法来源:
uintptr_t
objc_object::sidetable_retainCount()
{
SideTable& table = SideTables()[this];
size_t refcnt_result = 1;
table.lock();
RefcountMap::iterator it = table.refcnts.find(this);
if (it != table.refcnts.end()) {
// this is valid for SIDE_TABLE_RC_PINNED too
refcnt_result += it->second >> SIDE_TABLE_RC_SHIFT;
}
table.unlock();
return refcnt_result;
}
答案 1 :(得分:0)
它的保留计数为1,直到它的块为止; 还有一个对象需要它,它的保留计数将增加1。 它将存在,直到没有人需要它;