Так что я подумал, что все эти вопросы прояснены. Затем внезапно я получаю ошибку (сбой), которую я не могу понять. Затем, выполнив исследование по устранению аварии, я заметил, что все, что, как я думал, я знал об этих критических областях, несколько ошибочно.
Ниже приведены 8 вопросов, которые я просто собираюсь ответить на них в надежде, что кто-нибудь ответит - ответы на них очень помогут мне вернуть мое понимание в нужное русло. Спасибо заранее!
Q1) Можно ли вызвать Release для объекта, если эта ссылка равна нулю? Это должно быть безвредно, верно?
Q2) Можно ли вызвать Release для объекта, если эта ссылка была освобождена и в качестве счетчика ссылок 0?
Q3) Необходимо ли устанавливать ссылку на ноль ПОСЛЕ отпускания? Что произойдет, если вы не установите его на ноль?
Q4) Есть ли разница между nil и NULL или это просто семантическая вещь, помогающая читателю / разработчику узнать тип объекта, просто взглянув на него?
Q5) Использование свойств ТРЕБУЕТСЯ использовать указатель «Self»?
Q6) Использование переменных экземпляра требует, чтобы указатель «Self» НЕ использовался?
В7) Когда я захочу использовать переменную экземпляра вместо ее свойства? Я полагаю, что члены с типом значения в порядке, поскольку они не выпускаются и не сохраняются.
Q8) Нужно ли вызывать коллелоц объекта из функции деаллока?
Во многих примерах я видел, как вызывается Release, но не Dealloc - такие учебники некорректны?