Свойства: «назначить» против «только для чтения» - PullRequest
0 голосов
/ 23 февраля 2012

Я видел это в некотором демонстрационном коде:

@property (readonly) SomeObject* someInstance;

На мой взгляд, мне не хватало упоминания о назначении, копировании или сохранении;если указатель пропущен, то что это за указатель?Очевидно, что это какой-то указатель, но я думаю, что в отсутствие retain или copy все указатели будут просто assign, поскольку они просто указывают и равны тому, что someInstance есть.

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

Ответы [ 4 ]

3 голосов
/ 23 февраля 2012

Другие значения (сохранить, копировать, назначить) имеют значение только тогда, когда у вас есть сеттер.Любой геттер, сгенерированный с любым из этих атрибутов, будет одинаковым.Сохранение, копирование или назначение действительно применяются только при настройке значений, поскольку вы изменяете поведение того, что установщик будет делать с переданным объектом. Поскольку это свойство доступно только для чтения, это означает, что вы создаете только метод получения, возвращающийуказатель объекта, не имеет значения, что еще есть, потому что вы все равно не можете его установить.

1 голос
/ 23 февраля 2012
**readonly**
Indicates that the property is read-only.
If you specify readonly, only a getter method is required in the @implementation block. If you use the @synthesize directive in the implementation block, only the getter method is synthesized. Moreover, if you attempt to assign a value using the dot syntax, you get a compiler error.

**assign**
Specifies that the setter uses simple assignment. This attribute is the default.
You use this attribute for scalar types such as NSInteger and CGRect.

readonly является одним из Writability . Есть 2, readwrite (по умолчанию) и readonly.

присваивать является одной из семантики сеттера . как сохранить / копировать и т. д.

Документация Apple

1 голос
/ 23 февраля 2012

Если вы не используете ARC, атрибуты assign, retain и copy влияют только на сгенерированный компилятором метод установки свойства.Поскольку компилятор не генерирует метод установки для свойства readonly, вам не нужно указывать ни один из этих атрибутов.

В любом случае может быть полезно указать один из них, если вы предоставите некоторыедругой метод, с помощью которого пользователь может установить свойство, чтобы задокументировать ваше владение (или нет) значением свойства.

Если вы используете ARC и @synthesize, владение этим свойством должно совпадать с владениемпеременная экземпляра.Если вы позволите компилятору сгенерировать переменную экземпляра, он автоматически применит атрибут владения свойства к переменной экземпляра.

0 голосов
/ 23 февраля 2012

должен прочитать это https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html

правопреемник Указывает, что сеттер использует простое присваивание. это атрибут является значением по умолчанию.

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