2017-07-18 93 views
-1

当我们调用的alloc与一类,所述对象的引用计数是否为1。例如:NSObject *obj = [NSObject alloc];,执行这行代码后,将对象的引用计数是0或1?我看了源代码,我找不到一些代码说明了对于引用计数的任何操作的alloc方法。如果对象的引用计数为0,则对象将被破坏,如果是1,那么它是如何实现的,是否有人可以帮助解决混淆,谢谢!当类通过alloc方法创建对象时,对象的引用计数是否更改为1?

回答

0

在MRC模式下,alloc方法创建对象并且引用计数将被计算为1.意味着类创建了对象并保留它。

如果创建一个方法的局部对象,而忘记释放,内存会被泄露。您需要手动释放它:[obj release];

OCNE alloced一个目的,是用于设定保留计数为1。因为对于caculating引用计数该方法将返回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; 
} 
+0

我阅读“黄金”源,发现它是只在内存中开辟到对象的空间中,并且存在于所述对象没有参考计数的任何操作,则该引用计数的目的是1从那里? –

+0

@Rushtoasktheway,回答已更新。 –

+0

您提供的方法是当对象与“retainCount”一起使用时将执行的方法。如果我不调用“retaionCount”方法,这个方法不会被执行,所以当我调用“alloc”方法的时候,并没有实现这个方法。 –

0

它的保留计数是1,直到它的块; 还有一对象需要它,它的保留计数将1 增加它会存在,直到没有人需要它;