На самом деле - без причины.
Обычно это просто выбор.
Есть три идиомы для написания аксессоров.
Авто-релиз :
- (void)setFoo:(id)newFoo {
[foo autorelease];
foo = [newFoo retain];
}
Меньше кода для записи, но я думаю, что авто-релиз в этом случае ленив.
Сохраните, а затем отпустите
- (void)setFoo:(id)newFoo {
[newFoo retain];
[foo release];
foo = newFoo;
}
Сначала проверьте
- (void)setFoo:(id)newFoo {
if ([foo isEqual:newFoo]) {
return;
}
[foo release];
foo = [newFoo retain];
}
Единственное различие между двумя последними состоит в том, что второй проверяет, отличается ли новое значение от текущего значения, прежде чем пытаться установить свойство.За счет дополнительного оператора if.Итак, если новое значение, вероятно, будет таким же, как и старое, использование этой конструкции даст лучшую производительность.
Как правило, и если вы по каким-то странным причинам не используете свойства, используйте retain затем release,и затем, если профилирование показывает, что есть узкое место - используйте метод проверки первым.