Я пытался сделать частную собственность в моем *.m
файл:
@interface MyClass (Private)
@property (nonatomic, retain) NSMutableArray *stuff;
@end
@implementation MyClass
@synthesize stuff; // not ok
Компилятор утверждает, что нет никакого объявленного свойства материала. Но существует материал. Только в анонимной категории. Позвольте мне предположить: Невозможный. Другие решения?
Вы хотите использовать «расширение класса», а не категория:
@interface MyClass ()
@property (nonatomic, retain) NSMutableArray *stuff;
@end
@implementation MyClass
@synthesize stuff; // ok
Расширения классов были созданы в Objective-C 2.0 частично специально для этой цели. Преимущество расширений классов заключается в том, что компилятор рассматривает их как часть исходного определения класса и, таким образом, может предупреждать о неполных реализациях.
Помимо чисто частных свойств, вы также можете создавать общедоступные свойства, доступные только для чтения, которые являются внутренними для чтения и записи. Свойство может быть повторно объявлено в расширениях класса исключительно для изменения доступа (только чтение или чтение и запись), но в противном случае оно должно быть идентичным в объявлении. Таким образом, вы можете сделать:
//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