Я начал изучать Objective-C несколько недель назад и до сих пор не понимаю, как правильно управлять инкапсуляцией класса. Каков наилучший способ объявить закрытую переменную-член в классе?
Кажется, что установка правильного метода get / setter для вашей переменной-члена с помощью "@property" - правильный путь, а не просто объявление "@ личное "в интерфейсе. Но мне кажется, что это все еще дает другим классам доступ к этим переменным. Даже если вы объявите свойство «только для чтения», внешний класс может получить доступ к ссылке на переменную-член и изменить ее!
Так что я предполагаю, что лучший способ объявить закрытую переменную-член - это не включать никакие guetter / setter. не объявив собственность. Я прав? Или есть лучший способ?
Спасибо
если вы не хотите, чтобы он был доступен для других классов, объявите @ свойство в вашей реализации, создавая анонимную категорию для вашего класса.
Заголовочный файл:
// MyClass.h
@interface MyClass : NSObject {
NSObject *_privateObject;
NSObject *_readonlyObject;
NSObject *_publicObject;
}
@property (nonatomic, retain, readonly) NSObject *readonlyObject;
@property (nonatomic, retain) NSObject *publicObject;
@end
Реализация:
// MyClass.m
@interface MyClass ()
@property (nonatomic, retain) NSObject *privateObject;
// Make it writable on the implementation
@property (nonatomic, retain, readwrite) NSObject *readonlyObject;
@end
@implementation MyClass
@synthesize privateObject = _privateObject;
@synthesize readonlyObject = _readonlyObject;
@synthesize publicObject = _publicObject;
Это примеры трех разных свойств.