Цель-C: импортировать заголовки в .h или .m? - PullRequest
26 голосов
/ 14 мая 2009

Я новичок в target-c и хотел бы узнать, как лучше импортировать некоторые внешние заголовки, которые я использую в своем классе.

Должен ли я хранить #import "classB.h" в моем собственном файле классов .h или в файле .m?

Какая разница?

Спасибо!

Ответы [ 4 ]

35 голосов
/ 14 мая 2009

Целесообразно помещать прямое объявление класса (@class classB;) в заголовок и #import "classB.h в .m

Объявление класса forward, например @class classB;, позволяет компилятору знать, что он должен ожидать класс позже, и не должно жаловаться на него в данный момент.

12 голосов
/ 14 мая 2009

Чтобы избежать циклических ссылок, только #import файла заголовка в файле заголовка другого класса, если он наследуется от этого класса. В противном случае используйте @class ClassName, чтобы объявить тип класса, если он вам нужен в заголовочном файле, и #import в файле реализации.

4 голосов
/ 14 мая 2009

Для компилятора это действительно не имеет значения. Вы можете просто выбросить декларации вперед в свой .h, а затем ждать до #import, пока ваш файл .m. См. этот пост на SO для получения дополнительной информации об этом.

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

2 голосов
/ 18 мая 2011

Рекомендуется импортировать другие файлы заголовков в файл заголовков. Таким образом, вы можете использовать класс как в заголовке, так и в файлах реализации (поскольку файл реализации (.m) импортирует связанный с ним файл заголовка).

Если вы хотите знать, когда импортировать файлы, а когда использовать декларацию форвард-класса, вы можете перейти здесь . ; -)

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