iOS: настройка свойств

Когда я устанавливаю свойство для объекта, который в данный момент находится в сохраненном NSArray, он будет хранить только указатель (облегченный) или скопирует содержимое в свойство?

Из того, что я знаю, кажется, что он только назначит указатель, но я не уверен.

Кроме того, при каких обстоятельствах использование *pointer = *otherPointer или методов set (например, setDelegate) копирует значение вместо простой передачи указателя, если таковой имеется. Разве это не должно всегда просто передавать адрес указателя?

1 ответ

Решение

Он всегда передает указатель, как вы сказали. Если вы специально не добавляете разыменовывающий знак, это всегда будет иметь место.

Тем не менее, когда вы добавляете свойство к классу и устанавливаете установщик на copy:

@property (nonatomic, copy) id obj;

При использовании точечного синтаксиса или метода установки это будет переведено в:

_obj = [otherObj copy];

Здесь будет зависеть, поддерживает ли рассматриваемый объект самовоспроизведение, или он вернется к своему суперклассу NSObject или копия другого промежуточного класса.

Кроме того, коллекция классов NSDictionary а также NSArray сделайте поверхностную копию, так как они копируют ссылки только на свои объекты, поэтому у вас есть две коллекции, указывающие на один и тот же набор объектов.

Другие вопросы по тегам