Вы помещаете #import s в файлы .h или .m? - PullRequest
23 голосов
/ 05 мая 2010

Интересно о стиле Objective-C.

У меня есть FooClass. [Hm], который зависит от BarClass. [Hm] для его реализации (хотя не для его интерфейса). Я могу #import "BarClass.h" прямо в FooClass.m или косвенно через FooClass.h. Интересно насчет общего выбора для этого.

1 Ответ

47 голосов
/ 05 мая 2010

Вы должны ВСЕГДА #import другие классы в вашем .m файле.

Если они также являются членами вашего класса, вы можете объявить их (используя директиву @class) в файле .h.

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

Другая причина, по которой вы должны делать это таким образом, была указана Мэттом Галлахером :

Причина использования предварительных объявлений в заголовочных файлах заключается в том, что они избегают ненужных зависимостей. то есть представьте, что B.h форвард заявляет, что A и B.m импортирует A.h. Затем представьте, что C.m, D.m, E.m и F.m импортируют B.h. После всего этого A.h меняется. Поскольку A только объявлено в B.h, только B.m нужно перестроить. Без предварительных деклараций все C.m, D.m, E.m и F.m должны были бы быть перестроены, если A изменится

Пример:

.h файл:

@class BarClass;

@interface FooClass : NSObject

...

@end

.m файл

#import "BarClass.h"

@implementation FooClass

...

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