Оба существующих ответа неверны.
@ synthesize генерирует сеттеры и геттеры, которые выглядят так:
- (void)setMyArray:(NSArray*)array {
if( myArray != array ) {
[myArray release];
myArray = [array retain];
}
}
- (NSArray*)myArray {
return myArray;
}
(Обратите внимание, что они не совсем такие, и отличаются, если вы указываете копию или другие атрибуты, но это основная формула). Теперь мы можем видеть, что self.myArray = nil;
освободит старый массив. self.myArray и myArray не являются взаимозаменяемыми для настройки. Более того, self.myArray = nil;
продолжит работать в мире, где собирается мусор.
Как указывает Дейв Делонг, self.myArray = nil уведомит любого, кто наблюдает за myArray, об измененном значении, что может быть проблемой, если вы сделаете это в своем методе dealloc. Чтобы избежать этого случая, ваш dealloc будет выглядеть примерно так:
- (void)dealloc {
[myArray release]; myArray = nil;
[super dealloc];
}
(примечание myArray = nil;
- это стилистический выбор здесь.)