当类通过alloc方法创建对象时,对象的引用计数是否变为1?

时间:2017-07-18 08:15:55

标签: ios automatic-ref-counting alloc retaincount

当我们用类调用alloc时,对象的引用计数是否为1.例如:NSObject *obj = [NSObject alloc] ;,执行此行代码后,对象的引用计数为0还是1?我阅读了源代码,我无法找到一些alloc方法的代码,用于引用计数的任何操作。如果引用的对象数为0,则对象将被销毁,如果是1,那么它是如何实现的,是否有人可以帮助解决混乱,谢谢!

2 个答案:

答案 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。 它将存在,直到没有人需要它;