Обратите внимание, что если вы используете виртуальную среду (как в режиме совместного хостинга), вы должны настроить свой путь на python, например: /home/user/mypython/bin/python ./cgi-bin/test.py
Вероятно, вы видели следующее:
1) [foo release];
2) self.bar = nil;
3) baz = nil;
Освобождает объект, обращаясь к нему через переменную экземпляра foo
. Переменная экземпляра станет висящим указателем. Это предпочтительный метод в dealloc.
Назначение nil
свойству bar
на self, что на практике освобождает все, что свойство в настоящее время сохраняет. Сделайте это, если у вас есть настраиваемый установщик для свойства, который должен очищать не только переменную экземпляра, поддерживающую свойство.
Заменяет указатель baz
, ссылающийся на объект, с помощью nil, но не освобождает предмет. Результат - утечка памяти. Никогда не делайте этого.
Если вы не используете свойства (где self.property = nil также освобождает объект), вам ВСЕГДА следует выполнять выпуск по коду, который устанавливает ссылку на nil, как вы отметили:
[view release]; view = nil;
Причина в том, что он исключает возможность использования недействительной ссылки. Это редко и сложно, но может произойти.
Что касается использования внутри вашего кода, в вашем dealloc
присвоение свойству не требуется, все, что вам нужно сделать - это releaseas
ing.
- (void)dealloc {
[myProperty release]; // don't need to assign since you won't have the object soon anyway
[super dealloc];
}
Я думаю, что использование обоих является своего рода страховочной сеткой. Имея только выпуск
, у вас могут возникнуть проблемы, если вы облажались с управлением подсчетом ссылок. Вы бы освободили объект, отдав его память обратно в систему, но указатель все еще будет действителен.
С nil
вы гарантируете, что программа не выйдет из строя, поскольку отправка сообщения на nil
приводит к ничего такого.
@ bbullis22, вы видели, что счетчик восстановления упал с 3 до 0, потому что вы установили ссылку на ноль. затем вы запросили оставшееся значение «ноль», которое равно нулю. однако объект, на который раньше ссылались, имеет тот же счетчик сохранения - 1 (из-за установки ссылки на nil). при использовании release ссылка по-прежнему ссылается на тот же объект, поэтому вы видите счетчик сохранения понизьте с 3 до 2 в этой ситуации.