Должны ли заголовочные файлы быть включены в файлы .h или .m? - PullRequest
0 голосов
/ 21 апреля 2011

Если у меня есть четыре пары файлов .h / .m

file1.h

file2.h

file3.h

file4.h

, где я использую функции file1.h, file2.h и file3.h в file4, должны ли эти заголовочные файлы быть включены в file4.h или file4.m?

Ответы [ 3 ]

3 голосов
/ 21 апреля 2011

В файле .m, если это возможно. Возможно, вам придется переслать объявление классов в файле .h, например:

@class AClassIImportInDotMFile;

Если класс B является подклассом класса A, вам необходимо импортировать файл класса .h в файл .h файла класса B.

1 голос
/ 21 апреля 2011

Я предполагаю, что file4.h будет использоваться другими .m файлами. Если это так, включите в file4.h только то, что используется в file4.h, а остальные в file4.cpp. Это уменьшит общее количество включений, а включение file4.h не приведет к ненужным дополнительным заголовкам.

Когда количество требуемых .h файлов начинает увеличиваться неудобно, вы можете сгруппировать их в заголовки тем. Например, topic1.h может включать file1.h и file2.h, но не file3.h.

0 голосов
/ 21 апреля 2011

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

Если это так, то вы захотите включить заголовки в файл .m, чтобы их можно было использовать внутри класса, но для любого внешнего доступа к этим элементам вы бы использовали id вместо ваших пользовательских классов. И разыгрывайте их, когда вы получаете их другими ссылочными методами.

Я сталкиваюсь с этой проблемой, если включаю AppDelegate.h, а затем ссылаюсь на другой класс в делегате приложения.
причина этого в том, что я хочу включить ссылку на мой текущий объект в делегат приложения, но класс также использует делегат приложения для доступа к другим классам. В этом случае я бы включил классы в AppDelegate.h и включил AppDelegate.h в файл m класса.

Надеюсь, это имело смысл.

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