@property (копия) - делается целая копия? - PullRequest
0 голосов
/ 11 апреля 2009

Я получаю подслои CALayer с этим средством доступа к свойству:

// @property(copy) NSArray *sublayers

NSArray* layer = mylayer.layer.sublayers;

Поскольку это свойство использует «copy», каждый раз, когда я просто выполняю:

mylayer.layer.sublayers

для меня сделана полная копия массива подслоев? Если так, то это может быть плохо, потому что у меня может быть более ста слоев, и я определенно не хочу создавать их огромную копию. Я просто хочу подсчитать и перебрать существующие слои, просто указатель на существующие слои,

Спасибо

Ответы [ 2 ]

2 голосов
/ 11 апреля 2009

Когда вы используете объявление 'copy' и вы @synthesize свойство, затем copy используется, когда свойство установлено.

В вашем примере вы получаете доступ только к значению, которое просто дает вам указатель на массив подслоев.

Вот ссылка на документацию АЦП по этому вопросу.

Обновление

  1. IIRC, среда выполнения достаточно умна, чтобы знать, является ли устанавливаемый объект изменчивым. Если неизменяемый объект передается в свойство, он сохраняется и не копируется.
  2. В некоторых случаях, если вы передаете изменчивый объект, который хотите изменить, вы должны написать свой собственный установщик, который вызывает mutableCopy объекта. Это показано в предоставленной мною документации .
1 голос
/ 11 апреля 2009

Я не уверен, что понимаю ваш ответ, Абизерн, поэтому позвольте мне сказать следующее:

Если вы используете (копировать) для свойства, вы будете делать новую копию этого объекта, что приведет к напрасной трате памяти. Я не уверен, почему они это делают, они могут просто использовать (только для чтения) вместо этого, если они хотят защитить значения от изменений. Кроме того, помните, что большинство классов значений являются неизменяемыми в Obj-C, поэтому они все равно не могут изменить значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...