Подтвердить что ты не робот

Вы помещаете #import s в файлы .h или .m?

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

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

4b9b3361

Ответ 1

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

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

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

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

Обоснование форвардных деклараций в заголовочных файлах заключается в том, что он избегает ненужных зависимостей. т.е. представьте B.h вперед заявляет, что A и B.m импортируют A.h. Тогда представьте C.m, D.m, E.m и F.m import 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