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