Публичное чтение, «частное» сохранение собственности - PullRequest
2 голосов
/ 26 апреля 2011

Каков наилучший способ создания свойства, доступного только для чтения, и чтения / записи для «частного»?Я мог бы создать метод только для чтения и объявить свойство в безымянном расширении в файле .m, но желательно, чтобы я оставил точечную запись.

Ответы [ 2 ]

6 голосов
/ 26 апреля 2011

В вашем общедоступном интерфейсе объявите свойство только для чтения, т.е.

// Foo.h
@interface Foo
{
@private
    Baz* bar;
}
@property (readonly, retain) Baz* bar;

@end

В вашей реализации вы можете объявить расширение класса , затем вы повторно объявите свойство read / write:

// Foo.m

@interface Foo() // Note parentheses

@property (retain) Baz* bar;

@end

@implementation Foo

@synthesize bar;

@end

Вышеуказанное означает, что будут созданы и установщик, и получатель, но в файлах, которые содержат заголовок, будет известен только получатель.Недостатком является то, что установщик действительно существует, так что если вы игнорируете предупреждения компилятора и используете установщик вне Foo.m, он все равно будет работать.

Однако преимущество перед простым объявлением свойства только для чтения и доступомнапрямую ивар заключается в том, что вам не нужно внедрять KVO вручную, и, конечно же, управление памятью выполняется автоматически.

2 голосов
/ 26 апреля 2011

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

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