Альтернативы константным переменным экземпляра в Objective-C? - PullRequest
3 голосов
/ 05 февраля 2012

Поскольку Objective-C не поддерживает переменные экземпляра const в классах, какие есть альтернативы, чтобы гарантировать, что значение переменной не изменится? Я не хочу прибегать к препроцессору #defines, потому что я бы предпочел переменные класса. Кроме того, есть ли причина, по которой переменные экземпляра const не поддерживаются?

1 Ответ

5 голосов
/ 05 февраля 2012

Объекты в Objective-C создаются иначе, чем в C ++ или Java. Все переменные экземпляра инициализируются в ноль с помощью метода alloc перед вызовом метода init, поэтому к тому времени, когда будет вызван init, будет слишком поздно для изменения переменной экземпляра const. Очевидно, что создатели компилятора могли модифицировать компилятор для поддержки изменения переменной экземпляра const в методе init, но они этого не сделали.

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

Если вы откажетесь от поддержки 32-битной Mac OS X, вы можете поместить переменные вашего экземпляра в @implementation вместо @interface, что полностью защищает их от вмешательства других классов.

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