Объектив C - Использование аксессура, если он не делает ничего другого
-
18-09-2019 - |
Вопрос
В цели C, если использование Getter и непосредственный доступ к ivar сделает точно то же самое, ни ленивый код загрузки в Getter, все, что он делает, это возвращает ivar, вы все равно используете аксессу или доступ к Ivar, так как есть нет разницы? Почему?
РЕДАКТИРОВАТЬ: Я говорю о классе.
Решение 3
Я решил всегда использовать [Self Ivar], а не непосредственно ivar, хотя я использую стандартную нотацию с кронштейном OBJC, а не точечные обозначения. Только исключение заключается в том, что [Self Ivar] является аксессуаром из ленивой загрузки, и я уже использовал его в методе, и я знаю метод
Другие советы
Существует небольшое преимущество в производительности, которое можно использовать, используя Ivar напрямую. Однако, чтобы избежать путаницы, я обычно префикс своих ivars _ на передней части, а затем синтезирую свойство, используя @synthesize foo = _foo; Что означает, что я могу либо сделать [Self Foo] или _foo. Затем он становится яснее в коде, о котором я имею в виду.
Тем не менее, преимущество не так много, и некоторые могут утверждать, что это преждевременная оптимизация. То, что использует свойство (или метод), даст вам возможность развивать свой класс позже и изменить ivar, но, сохраняя при этом свойство таким же (например, что делает его рассчитанным свойством). Это также позволит подклассам переопределить вашу собственность и все еще работать.
(Кстати, есть еще некоторые случаи, когда можно полезно относиться к синтаксису свойств, например, при написании на ivar. В этом случае поддержка собственности для копии | удержание может быть полезна для освобождения предыдущего объекта и получения Правильная последовательность вызовов для сохранения/выпуска)
Вы говорите о том, о чем за пределами класса или внутри? Если без этого, то вы всегда используете аксессуар. Прежде всего, видимость по умолчанию для ivars в OBJC @protected
, поэтому, если вы явно не сделаете их @public
, ты имеют Чтобы использовать аксессу. Помимо этого, вы используете аксессуар, потому что никогда не знаете, сможете ли вы (или кто -то еще) подкласс ваш класс и изменить его достаточно, чтобы использовать аксессуар.
Если вы говорите в классе, вы не имеют Чтобы использовать аксессу, но если вы настроили @property
Значения, нет никаких причин не использовать нотацию точки, даже если вы все синтезируете. Если вы используете стандартные нотации OBJC, например [myObject someVariable]
, Затем повторяемые вложенные сообщения могут быть трудно читать и загромождать.
Действительно, аксессуаль не так большой, как мутатор, потому что мутаторы часто делают более одного. Использование оба Getters (вне класса) и сеттеров - хорошая практика.