Ответ 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