Как сделать частную собственность? - PullRequest
8 голосов
/ 05 мая 2010

Я пытался создать частную собственность в моем *.m файле:

@interface MyClass (Private)
@property (nonatomic, retain) NSMutableArray *stuff;
@end

@implementation MyClass
@synthesize stuff; // not ok

Компилятор утверждает, что не объявлено свойство вещиНо есть вещи.Просто в анонимной категории.Дай угадаю: невозможно.Другие решения?

1 Ответ

14 голосов
/ 05 мая 2010

Вы хотите использовать «расширение класса», а не категорию:

@interface MyClass ()
@property (nonatomic, retain) NSMutableArray *stuff;
@end

@implementation MyClass
@synthesize stuff; // ok

Расширения класса были созданы в Objective-C 2.0 частично специально для этой цели. Преимущество расширений классов заключается в том, что компилятор рассматривает их как часть исходного определения класса и, таким образом, может предупреждать о неполных реализациях.

Помимо сугубо личных свойств, вы также можете создавать открытые свойства только для чтения, которые предназначены только для чтения и записи. Свойство может быть повторно объявлено в расширениях класса исключительно для изменения доступа (readonly против readwrite), но в противном случае оно должно быть идентичным в объявлении. Таким образом вы можете сделать:

//MyClass.h
@interface MyClass : NSObject
{ }
@property (nonatomic,retain,redonly) NSArray *myProperty;
@end

//MyClass.m
@interface MyClass ()
@property (nonatomic, retain, readwrite) NSArray *myProperty;
@end

@implementation MyClass
@synthesize myProperty;
//...
@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...