О частных переменных экземпляра в Objective-C - PullRequest
1 голос
/ 03 апреля 2009

В xCode 3 я определил частные переменные экземпляра в классе. Когда я напрямую обращаюсь к закрытым переменным в клиентских кодах, почему компилятор просто показывает мне предупреждение, а не ошибку? Код все еще может работать. Предупреждение говорит, что это может быть серьезной ошибкой в ​​будущем. Что означает «грубая ошибка»? Спасибо.

Ответы [ 2 ]

1 голос
/ 03 апреля 2009

Жесткая ошибка означает, что когда-нибудь в будущем компилятор будет вести себя так, как вы ожидаете (то есть он не будет компилировать исходный файл, когда вы непосредственно обращаетесь к переменной экземпляра вне определенной области видимости).

Сейчас компилятор просто не применяет Objective-C к ограничениям видимости. Однако здесь есть предупреждение, чтобы напомнить вам, что вы делаете что-то, чего не следует делать, и обратить на это внимание, если вы сделали это случайно.

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

В общем, плохой идеей является прямой доступ к переменной экземпляра в любом случае. Пока вы можете использовать Obj-C 2.0, вероятно, лучше использовать что-то вроде свойств, если вы проектируете объект модели с чистыми данными.

0 голосов
/ 03 апреля 2009

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

...