iOS: настройка свойств
Когда я устанавливаю свойство для объекта, который в данный момент находится в сохраненном NSArray, он будет хранить только указатель (облегченный) или скопирует содержимое в свойство?
Из того, что я знаю, кажется, что он только назначит указатель, но я не уверен.
Кроме того, при каких обстоятельствах использование *pointer = *otherPointer или методов set (например, setDelegate) копирует значение вместо простой передачи указателя, если таковой имеется. Разве это не должно всегда просто передавать адрес указателя?
1 ответ
Он всегда передает указатель, как вы сказали. Если вы специально не добавляете разыменовывающий знак, это всегда будет иметь место.
Тем не менее, когда вы добавляете свойство к классу и устанавливаете установщик на copy
:
@property (nonatomic, copy) id obj;
При использовании точечного синтаксиса или метода установки это будет переведено в:
_obj = [otherObj copy];
Здесь будет зависеть, поддерживает ли рассматриваемый объект самовоспроизведение, или он вернется к своему суперклассу NSObject
или копия другого промежуточного класса.
Кроме того, коллекция классов NSDictionary
а также NSArray
сделайте поверхностную копию, так как они копируют ссылки только на свои объекты, поэтому у вас есть две коллекции, указывающие на один и тот же набор объектов.