Как сделать частную собственность?

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

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

@implementation MyClass
@synthesize stuff; // not ok

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

8
задан Georg Fritzsche 11 May 2010 в 21:09
поделиться

1 ответ

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

@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
14
ответ дан 5 December 2019 в 12:08
поделиться