Будет ли свойство readonly с пользовательским getter иметь синтезированную переменную экземпляра?
У меня есть ситуация, когда я не хочу, чтобы переменные экземпляра были синтезированы для набора свойств (я управляю их через пользовательские значения по умолчанию и брелок).
Если у меня есть следующее, _loginUsername
наверняка будет синтезировано:
@property (nonatomic, readonly) NSString *loginUsername;
И я знаю, что если бы у меня было следующее, переменная экземпляра не была бы синтезирована, потому что в заявлении говорится: "Я сам позабочусь об этом":
@property (nonatomic, getter = loginUsername, setter = setLoginUsername) NSString *loginUsername;
Является ли поведение одинаковым для свойства readonly с пользовательским getter?:
@property (nonatomic, readonly, getter = loginUsername) NSString *loginUsername;
Будет ли синтезирован _loginUsername
для объявления окончательного свойства? Я уверен, что не будет, но я пытаюсь лучше понять атрибуты свойств, поэтому хочу убедиться, что я не сработал.
Бонусные баллы для объяснения того, известно ли это во время компиляции (нет обмана и проверки в Xcode!).
У меня нет никаких операторов @synthesize
в моем файле реализации.
Ответы
Ответ 1
Примечание. Компилятор автоматически синтезирует переменную экземпляра во всех ситуациях, когда он также синтезирует, по меньшей мере, один аксессор метод. Если вы используете как getter, так и setter для readwrite свойство или getter для свойства readonly, компилятор будет предположим, что вы контролируете реализацию свойства и не будет автоматически синтезировать переменную экземпляра автоматически. Если вы все еще нужна переменная экземпляра, вам нужно запросить, чтобы это было синтезировали
Программирование с помощью Objective-c - Инкапсуляция данных - под Вы можете реализовать методы пользовательского доступа