Ios 当类通过alloc方法创建对象时,对象';s的引用计数更改为1?

Ios 当类通过alloc方法创建对象时,对象';s的引用计数更改为1?,ios,automatic-ref-counting,alloc,retaincount,Ios,Automatic Ref Counting,Alloc,Retaincount,当我们使用类调用alloc时,对象的引用计数是否为1。例如:NSObject*obj=[NSObject alloc];,执行这行代码后,对象的引用计数是0还是1?我阅读了源代码,找不到alloc方法对引用计数进行任何操作的代码。如果引用的对象计数为0,则该对象将被销毁,如果是1,则该如何实现,是否有人可以帮助解决混淆,谢谢!在MRC模式下,alloc方法创建对象,引用计数将计算为1。表示创建并保留对象的类 如果您在一个方法中创建了本地对象,而忘记释放它,那么内存就会泄漏。您需要手动释放它:[o

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

在MRC模式下,
alloc
方法创建对象,引用计数将计算为1。表示创建并保留对象的类

如果您在一个方法中创建了本地对象,而忘记释放它,那么内存就会泄漏。您需要手动释放它:
[obj release]

对于分配的对象,没有将保留计数设置为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,直到它脱离其块; 还有一个对象需要它,它的保留计数将增加1。
它将一直存在,直到没有人需要它

我阅读了“alloc”源代码,发现它只是在内存中为对象打开一个空间,并且没有对对象计数的引用任何操作,那么引用计数的对象是1,从哪里开始?您提供的方法是一个方法,当对象与“retainCount”一起使用时将执行该方法。如果我不调用“RetainCount”方法,这个方法就不会被执行,所以当我调用“alloc”方法的时候,没有实现这个方法,当然应该是这样的。只有当您需要“重新计入”时,它才会为您计算。这就是为什么在alloc时没有看到“retainCount”操作。我猜在调用[obj release]时也会调用此方法,如果结果为1(发布后变为0),则该对象将被视为销毁。