Объектив C - Использование аксессура, если он не делает ничего другого

StackOverflow https://stackoverflow.com/questions/1292009

Вопрос

В цели 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 (вне класса) и сеттеров - хорошая практика.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top