разница между [self.property release] и [property release] - PullRequest
0 голосов
/ 02 июля 2010

Может кто-нибудь сказать мне разницу между [self.property release] и [property release]. Я спрашиваю об этом, потому что в одном из контроллеров представления в моем приложении я делаю [self.property release] и помещаю этот контроллер представления в стек навигации, когда я вставляю этот контроллер представления, он показывает ошибку EXC_BAD_INSTRUCTION, но когда я делаю [property release] все работает нормально ...? Может кто-нибудь сказать мне, где я иду не так. Я новичок в разработке приложений для iPhone.

Ответы [ 2 ]

4 голосов
/ 14 октября 2010

Различие: self.myProperty - это метод доступа к переменной экземпляра myProperty. Методы доступа генерируются @synthesize или могут быть явно определены как

-(Type*) myProperty; 
-(void) setMyProperty:(Type*)p;

Итак, предполагая, что вы определили метод доступа как (ключ сохраняется)

@property (retain) Type* myProperty;

1010 * тогда *

[myProperty release]; 
myProperty = nil;

эквивалентно

self.myProperty = nil;

В общем, хорошей практикой является установка освобожденных объектов равным нулю, чтобы вы случайно не попытались их использовать (или перепустить).

Нет веских причин для звонка [self.property release].

3 голосов
/ 02 июля 2010

[свойство release] отправляет сообщение о выпуске в переменную экземпляра свойства и почти наверняка именно то, что вы хотите сделать.

[self.property release] отправляет сообщение о выпуске объекту, возвращенному self.property,Результат этого будет зависеть от того, определено ли свойство как назначить / скопировать / сохранить, и поэтому в основном вы, вероятно, выпускаете объект, отличный от того, который, как вы думаете, является.

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