Когда класс создает объект с помощью метода alloc, счетчик ссылок объекта изменяется на 1?
Когда мы вызываем alloc с помощью Class, будет ли счетчик ссылок на объект равен 1. Например: NSObject *obj = [NSObject alloc]
;, После выполнения этой строки кода счетчик ссылок объекта равен 0 или 1? Я прочитал исходный код, я не могу найти код, который alloc
метод для любой операции по подсчету ссылок. Если объект с номером ссылки 0, объект будет уничтожен, если это 1, то это, как достичь, может ли кто-то помочь решить путаницу, спасибо!
2 ответа
Счет удержания равен 1 до выхода из блока; И еще один объект нуждается в этом, его счетчик увеличится на 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;
}