Можно ли обращаться к переменным экземпляра напрямую в методе экземпляра того же класса, чтобы прочитать их значение? - PullRequest
2 голосов
/ 19 января 2012

У меня есть переменная экземпляра -> mXYZ Я читал во многих местах, что лучше иметь средства доступа для этих методов.Но если я использую их только внутри класса и это тоже для чтения.

Я знаю, что для изменения экземпляра var, мы всегда должны использовать установщик, так как нужно выполнить какую-то работу, например, выпустить существующий объектуказал и еще несколько вещей.

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

переменная небыть доступным вне класса.

Ответы [ 2 ]

6 голосов
/ 19 января 2012

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

Например, класс может отложить загрузку значений некоторых из егосвойства (то есть значения ivar) с диска или удаленного сервера, пока один из них не будет доступен через его получатель.

3 голосов
/ 19 января 2012

Если у вас есть частная переменная экземпляра в вашем классе, то будет ли доступ к ней напрямую или определено свойство, зависит от:

  • как вы ее используете: нужно ли вам управлять (de) выделение, хотите ли вы отложить создание задержки, это псевдопеременная (например, сохранение temp в F, но имеющая свойства F и C)

  • тип управления памятью, который выиспользование: ручное (сохранение / освобождение) или автоматическое (ARC или сборщик мусора)

Свойства обычно мало полезны для переменных с примитивным типом, псевдопеременные являются очевидным контрпримером.

При автоматическом управлении памятью одно из наиболее распространенных применений свойств - локализация и обработка сохранения / освобождения - удаляется.Но если вам нужны свойства семантики копирования при назначении, лучше, чем прямой доступ.

При ручном управлении памятью свойства имеют явное преимущество - управление памятью локализовано, а язык @synthesize предоставляется языком.Однако, как вы заметили, для чтения переменной прямой доступ часто подходит.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...