2012-01-05 3 views
-1

бит n00b вопрос этот, но я не смог найти ответ на t'web, просто интересно, что правила вокруг, следует ли #import в интерфейсе или реализации?Правила Obj-C для #import?

Я только что понял, что мой (один) проект импортируется повсюду, и я хочу его убрать. Достаточно ли просто импортировать в интерфейс, будет ли реализация затем выбрать это?

Кроме того, я прочитал через Google, что рекомендуется только #import классы, которые находятся в другой структуре, в противном случае используйте @class. Может ли кто-нибудь убедиться, что это лучшая практика?

благодарит заранее.

+0

[@class против #import] (http://stackoverflow.com/questions/322597/class-vs-import) – beryllium

ответ

0

Лучшей практикой является минимизация количества импортируемых файлов, чтобы частичная перекомпиляция не импортировала файл.

Для этого заметим, что @class X можно использовать, когда вы не получаете доступ к переменной экземпляра класса или класса X или не вызываете метод X. Если вам нужен метод или переменная, вы должны #import. (Фактически это различие может применяться только к переменным, которые программа будет компилировать и запускать, если вы вызовете методы классов, объявленных с помощью @class, но вы получите предупреждения о неизвестных n селекторах, что не является хорошей практикой)

С @class X объявлениями вы можете ссылайтесь только на указатель на класс, то есть X *

Это сводится к использованию @class в заголовках, если вы не наследуете от класса. Используйте #import в файлах реализации, если вы просто не передаете указатель и не отправляете сообщение никому из этого класса.

Это не 100%, поскольку есть предварительно скомпилированные заголовки, так что класс, который используется в большинстве ваших проектов, может быть #imported, так как он будет в предварительно скомпилированном заголовке и поэтому будет только один раз читать.

+0

Отлично - спасибо. – SM2011

0

Ну, определенно, никогда не импортируйте файлы .m.

Также обратите внимание на двухсторонний импорт: не позволяйте header1 импортировать header2, а header2 импортирует header1. Это просто пойдет не так.

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

Попытайтесь избежать импорта файлов из заголовков - импорт в файлы реализации в порядке.

2

Да, достаточно импортировать только в файл реализации. Если вы объявили класс в файле .h, то используйте форвардное объявление, т. Е., @class ClassName; в .h файле.

0

Предоставьте все эти правила, если вы импортируете заголовок, объявляющий протокол, обязательно поместите импорт в файл .h.

+0

ok - спасибо за ответ. – SM2011

Смежные вопросы