2010-10-26 3 views
1

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

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

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

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

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

ответ

2

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

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

Для того, чтобы сеттер выполнял мелкое копирование, сделайте его @property(copy). Невозможно сделать это глубокой копией.

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