2010-09-13 2 views
4

Если я с помощью синтезируемых свойства, то почему бы не я просто говорю:self.prop = nil; vs. [prop release]; prop = nil;

self.property = nil; 

Это высвободит количество реф, и убедитесь, что у меня нет оборванных указатель.

Кажется простым, и еще 99% кода я вижу, кажется, сделать это следующим образом:

[property release]; 
property = nil; 

и да, в большинстве случаев они являются свойствами. Я получаю ужасное чувство, что чего-то не хватает? Сорта вроде когда я забыл поставить «я». перед некоторыми из свойств и задавался вопросом, почему это сбой :-)

ответ

9

Если вы пытаетесь очистить значение свойства где угодно, но в методе dealloc, то self.property = nil; - лучший способ сделать это. Он будет обрабатывать все задачи управления памятью для вас, помогая предотвратить любые проблемы.

Если вы в методе dealloc, чем самый лучший способ, чтобы выпустить что Ивар для дебатов, но [property release]; как правило, рекомендуется, так как вызов self.property может иметь побочные эффекты. В методе dealloc вызов property = nil; не требуется.

+4

С одной оговоркой; 'self.property = nil;' будет запускать любые наблюдатели KV, тогда как прямой доступ не будет. В любом случае это работает, но подходящий - вопрос мнения. – bbum

+0

Это также зависит от желаемого результата. Иногда вы хотите, чтобы эти наблюдатели стреляли, иногда вы хотите обойти их. – kubi

Смежные вопросы