почему в objective c требуются геттеры и установщики?

#objective-c-2.0

#objective-c-2.0

Вопрос:

я прочитал несколько ответов на stackoverflow с этим вопросом в голове, но мой вопрос немного другой. что я хочу знать, так это для переменных, которые не зависят от других переменных класса, почему я не могу объявить переменную общедоступной, как мы делаем в java, а затем получить доступ к переменной напрямую?

я имею в виду, что в objective c, если у меня есть переменная, которую я объявил в интерфейсе класса, почему я не могу напрямую (без создания средств получения и установки) получить доступ с помощью self.variable или instanceofclass.variable ….?

это то, что мы обычно делаем в java и других объектно-ориентированных языках.

средства получения и установки имеют свои преимущества, но когда вы делаете простые вещи, не было бы лучше, если бы вы обращались к переменным способом, который я упомянул выше.

PS: я очень новичок в objective c, поэтому, если мы можем получить доступ к переменным так, как, как я утверждаю, мы не можем, пожалуйста, извините. я пытался это сделать, но произошла ошибка, поэтому я спрашиваю, но это вполне могло быть связано с чем-то другим. итак, еще раз, пожалуйста, извините.

заранее благодарю вас.

Ответ №1:

потому что это в корне неверно. Если вы предоставляете переменную-член как общедоступную, вы предоставляете внутренние детали стратегии хранения, которые не должны быть известны клиенту. Это значительно усложнит вашу жизнь, если в будущем вы захотите реализовать разумные стратегии, такие как распределение на лету или даже просто ввод инструкции print при каждом обращении к переменной, для целей отладки. Доступ к общедоступной переменной дает вам гораздо меньше свободы, чем вызов метода, и вы привязаны к своему выбору, потому что доступ к переменной-члену и вызов функции-члена используют разные синтаксисы, поэтому вам придется обойти и исправить свой код везде.

Единственная ситуация, когда это не является проблемой, — это когда у вас есть чистая структура, класс, члены которого предназначены исключительно для хранения и переноса множества данных под общим именем, и стратегия хранения уже раскрывается самой природой набора данных, который вы носите с собой.

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

1. хорошо. плюс, если вы делаете это в стиле Java, то управление памятью также станет очень беспорядочным. GC здесь не представлен. я только что понял это. Спасибо.