Вы должны ВСЕГДА #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