Какие атрибуты я должен использовать для @property? - PullRequest
0 голосов
/ 12 ноября 2010

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

Ответы [ 2 ]

0 голосов
/ 12 ноября 2010

атрибуты управления памятью

retain: значения отправляются в виде сообщения retain, когда значение установлено. Этот атрибут вы будете использовать чаще всего.

copy: значение отправляется в виде сообщения copy, а возвращаемое значение сохраняется.

Для свойств, которые используют retain или copy, вы должны release указать объект в dealloc, в противном случае объект будет вытекать.

assign: assign просто копирует значение. В случае объектов это означает копирование адреса объекта (сохранение объекта не отправляется объекту). Вы должны использовать это, когда retain создаст цикл сохранения. Примерами циклов сохранения являются отношения родитель / потомок, где оба объекта требуют ссылки на другой (родитель должен retain дочерний элемент, дочерний элемент должен assign родительский объект). Объект должен assign своих делегатов по той же причине. Вы также должны использовать assign для значений примитивов (char, int, long и т. Д.). retain и copy не будут работать с примитивами, потому что примитивы не являются объектами.

0 голосов
/ 12 ноября 2010
  • Если ваше свойство будет доступно из нескольких потоков, добавьте «атомарный», если вы не уверены, добавьте «неатомный» (быстрее)
  • Если ваше свойство никогда не должно быть изменено с другим значением (т.е. установлено), добавьте «только для чтения»
  • Если вы хотите разрешить сеттеры, а значением является объект Objective-C, добавьте «сохранить» или «скопировать» (если вы не уверены, что хотите «назначить» поведение). Копия должна использоваться для NSString, в частности, сохранить для большинства других вещей. Вы, вероятно, узнаете, хотите ли вы копию, а не сохраняете тот же объект.
  • Если вы не хотите, чтобы ваши получатели возвращали указатели на один и тот же объект (поскольку он может быть изменен без вашего ведома), добавьте «copy»

Обо всем, что я могу думать о макушке на самом деле. Вам вряд ли когда-нибудь придется задуматься над вопросом: «Хочу ли я получить копию или ссылку?», «Будет ли это использоваться в нескольких потоках одновременно?» и "это настраивается?".

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