Объявление частных переменных-членов

Я начал изучать Objective-C несколько недель назад и до сих пор не понимаю, как правильно управлять инкапсуляцией класса. Каков наилучший способ объявить закрытую переменную-член в классе?

Кажется, что установка правильного метода get / setter для вашей переменной-члена с помощью "@property" - правильный путь, а не просто объявление "@ личное "в интерфейсе. Но мне кажется, что это все еще дает другим классам доступ к этим переменным. Даже если вы объявите свойство «только для чтения», внешний класс может получить доступ к ссылке на переменную-член и изменить ее!

Так что я предполагаю, что лучший способ объявить закрытую переменную-член - это не включать никакие guetter / setter. не объявив собственность. Я прав? Или есть лучший способ?

Спасибо

9
задан kiamlaluno 26 August 2010 в 02:01
поделиться

1 ответ

если вы не хотите, чтобы он был доступен для других классов, объявите @ свойство в вашей реализации, создавая анонимную категорию для вашего класса.

Заголовочный файл:

// 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;

Это примеры трех разных свойств.

  • privateObject не виден в других классах;
  • readonlyObject виден, но доступен только для чтения;
  • publicObject виден и может быть получен и установлен;
23
ответ дан 4 December 2019 в 09:11
поделиться