Есть ли способ определить метод установки и получения для внутренних свойств в Objective-C?

#ios #objective-c

#iOS #objective-c

Вопрос:

Как я знаю, для общедоступных свойств в заголовочном файле компилятор автоматически генерирует методы получения и установки, и вы можете переопределить эти средства доступа. Но для внутренних свойств, объявленных в расширении класса, я не знаю, как определить методы получения и установки для них.

Моя привычка обычно инициализировать экземпляр (при необходимости) и устанавливать значения по умолчанию для свойства в методе getter. Итак, я ищу способ сделать то же самое с внутренними свойствами.

Комментарии:

1. Для внутренних свойств будут созданы геттеры и сеттеры, созданные для них так же, как и для общедоступных свойств. Можете ли вы добавить некоторый код, показывающий, как вы объявляете эти свойства, которые не генерируют геттеры и сеттеры?

Ответ №1:

Нет абсолютно никакой разницы во время выполнения между «общедоступными» и «внутренними» свойствами. Разница, которую вы обсуждаете, заключается только в том, в каком файле они объявлены. Если компилятор не может видеть определение свойства, он выдаст предупреждение (ошибка, если вы используете точечную нотацию) при попытке получить к нему доступ. Но это не имеет ничего общего с тем, как что-либо на самом деле работает во время выполнения.

Вы можете переопределить «внутренние» свойства точно так же, как и «общедоступные».

Это сказано и не связано, и просто мнение, которое следует принять или оставить, основываясь на опыте, который видел это раньше:

Моя привычка обычно инициализировать экземпляр (при необходимости) и устанавливать значения по умолчанию для свойства в методе getter. Итак, я ищу способ сделать то же самое с внутренними свойствами.

Я, вероятно, не стал бы делать это «привычкой». Может иметь смысл переопределить методы получения с отложенной инициализацией для конкретных случаев, когда это важно, но установка значений по умолчанию в геттере таким образом, как правило, слишком сложна и подвержена ошибкам при небольшом значении. Просто установите значения по умолчанию в инициализаторе.