Что произойдет, если сохранить NSArray или NSMutableArray?

В исходных кодах

@property(retain) NSString* str;
@sythesize str;
self.str = newStr;

Я понимаю, что на самом деле произойдет следующее

if( str != newStr ){
     [str release];
     str = [newStr retain]; 
}

Так как насчет NSArray или NSMutableArray? Кажется, что это сложно, следует учитывать поверхностную копию и глубокую копию.


person Forrest    schedule 26.10.2010    source источник


Ответы (1)


Это то же самое. Установка свойства изменяет только право собственности на этот массив, а не на содержимое массива (содержимое принадлежит тому же массиву). Таким образом, только массив должен быть обработан -retain.

На самом деле среда выполнения не заботится о конкретном типе свойства Objective-C. Одна и та же процедура установки будет применена ко всем @property(retain) свойствам.

Чтобы сеттер выполнял поверхностное копирование, сделайте его @property(copy). Там нет способа сделать это глубокое копирование.

person kennytm    schedule 26.10.2010