Что происходит, когда «сохраняют» NSArray или NSMutableArray? - PullRequest
1 голос
/ 26 октября 2010

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

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

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

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

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

1 Ответ

2 голосов
/ 26 октября 2010

То же самое. Установка свойства только изменяет владельца этого массива, а не содержимое массива (содержимое принадлежит одному и тому же массиву). Следовательно, -retain 'ed.

требует только массив

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

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

...