Как правильно освободить объект? - PullRequest
0 голосов
/ 14 февраля 2012

Я знаю, что в iOS 5 есть автоматический подсчет ссылок, который устраняет необходимость во всем этом, но в любом случае это очень просто.

Полезно ли устанавливать объект равным нулю, прежде чем его отпуститьили наоборот, когда вы выпускаете его, затем устанавливаете его на ноль?

В любом случае, я просто хочу избавиться от любых возможностей сбоев в моем приложении, и я просто хочу, чтобы этот способпредотвратить это.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

Вызов release на ноль ничего не дает.

1 голос
/ 14 февраля 2012

Нет, вы не устанавливаете его равным nil до того, как отпустите объект, если вы установите его равным nil, в основном вы потеряете указатель на ваш объект, и теперь ваша переменная указывает на nil.Отправка релиза на ноль ничего не делает.Если вы хотите защитить себя от значения / указателя мусора, вы можете установить его равным nil после освобождения объекта.Но я не понимаю, почему вам нужно установить его на ноль, кроме как если это переменная экземпляра.

1 голос
/ 14 февраля 2012

Когда вы используете автоматический подсчет ссылок, вы не можете позвонить release.Это ошибка компилятора.

При ручном подсчете ссылок вы должны release, а затем установить nil.Установка переменной nil и последующий вызов release приводит к утечке объекта (он не освобождает его).Он не потерпит крах, но он съест память (в конечном итоге, возможно, столько памяти, что операционная система остановит вас).

ARC - ваш лучший инструмент для уменьшения сбоев.Не существует механизма, который мог бы устранить все возможности аварий.Но помогут два очень простых правила:

  • Используйте ARC, если это вообще возможно.
  • Включите «Обрабатывать предупреждения как ошибки».Никогда не допускайте предупреждений в Objective-C.

Есть много других небольших правил, но это те два, с которых каждый разработчик iOS должен начинать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...