практические различия заключаются в следующем.
Установка свойства равным nil с помощью метода доступа к свойству позволит синтезированному методу завладеть вашим новым свойством nil после освобождения существующего свойства.
// we will take for granted that you synthesize this property
@property (nonatomic, retain) IBOutlet UILabel* label;
мы будем использовать средство доступа к свойству и установить его равным nil.
//This will in actuality set the new value of nil to the label variable after
//releasing the existing label that it had a retain count on.
self.label = nil;
затем мы выпустим его напрямую
//This line on the other hand will merely release the label directly.
//As soon as the label is deallocated you will have a handle to an invalid object.
//(memory space that used to be your label)
[label release];
Теперь мы покажем упрощенную версию средства доступа к свойству,(не использовать буквально)
//Simply put the following is an pseudo equivalent of the property setter.
[label release]
label = nil;
главное здесь то, что средство доступа к свойству обрабатывает освобождение метки, которую оно сохранило.и установив его на то, что вы вручаете (в данном случае это ноль)
, поэтому добавление следующего кода
label = nil;
без освобождения сохраненного объекта вызовет утечку памяти, и вы получитесохранить счет на ярлыке, на который у вас больше нет указателя.
Примечание :
Еще одна вещь, которую необходимо учитывать.Любой указатель, который равен нулю.сможет принимать сообщения.И в ответ они ответят нулем.С другой стороны, объект, который был освобожден, как только эта память будет освобождена, ваше сообщение к нему, скорее всего, выдаст ошибку.результат непредсказуем.Это хорошая причина для установки ваших свойств на ноль.Мало того, что это будет обращаться с выпуском для объекта, который это держит.но это также даст вам объект, на который вы можете безопасно послать сообщение, не взорвавшись.
Хорошая точка @ WaltSellers
Доступ к переменной - независимо от того,это средство доступа к свойству или переменная экземпляра.- После того, как он был выпущен полностью.Приведет к "неопределенным" действиям.Это означает, что доступ может работать нормально, или он может испортить другие части приложения, или, наоборот, он может просто взорваться очень быстро и завершить работу приложения-нарушителя.В основном, установив для переменной значение nil после освобождения, вы сможете обойти эту ошибку.
Отдельный совет от меня
, чтобы преодолеть неправильное представление метода доступа к свойству и переменной экземпляра.Я просто @synthesize и говорю ему установить имя переменной.
@synthesize label = _label;
, делая это, позволяет мне отличать self.label от его переменной экземпляра.так как вы больше не можете получить доступ к переменной метки напрямую без предшествующего _