Я читал, что (из книги, написанной Кадзуки Сакамото и Томохико Фурумото) во время выполнения iOS поддерживает hashtable
с адресом объекта в качестве ключа, а этот объект сохраняет счет как значение.
Как показано ниже:
key(object's addr) value(reference count)
0x7fff59a7ba88 2
0x7fa84b4b2c10 0
...
И среда выполнения iOS будет проверять таблицу один раз, чтобы увидеть, равен ли какой-либо ключ со значением нулю, что означает, что некоторые объекты должны быть освобождены, затем iOS удалит эту пару ключ-значение из таблицы и вызовет dealloc
для освобождения памяти объекта.
Если эта теория верна, то мой вопрос в том, в какое время, с какой периодичностью система будет проверять reference count hashtable
? Каждый runloop
? Или iOS вообще не будет проверять таблицу, а только автоматически?
ОБНОВИТЬ:
Я только что исправил свое описание, которое не должно иметь ничего общего с ARC или MRC, оно больше касается подсчета ссылок во время выполнения.
ARC
, но когда? Это мой вопрос. - person Boris   schedule 19.07.2016retain
иrelease
компилятором. Коды ARC и MRC одинаковы во время выполнения. Когда счетчик сохранения объекта становится равным нулю, он освобождается (ARC или MRC). - person rmaddy   schedule 19.07.2016weak table
, который поддерживает адреса объектов как ключи и ихweak
переменные, которые указывают на них как значения. - person Boris   schedule 19.07.2016