Вы помещаете #import s в файлы.h или.m?
Интересно о стиле Objective-C.
У меня есть FooClass.[Hm], который зависит от BarClass.[Hm] для его реализации (хотя не для его интерфейса). Я могу #import "BarClass.h"
или непосредственно в FooClass.m или косвенно через FooClass.h. Интересно насчет общего выбора для этого.
1 ответ
Вы должны ВСЕГДА #import
другие классы в вашем .m
файл.
Если они также являются членами вашего класса, вы можете объявить их (используя @class
директива) в вашем .h
файл.
Причина в том, что когда вы #import
.h
файл, вы хотите импортировать только объявления, а не определения. Используя @class
и только #import
в .m
файлы, вы: а) сокращение накладных расходов и б) делает для чистого кода.
Matt Gallagher указал на еще одну причину, по которой вы должны сделать это таким образом:
Причина, лежащая в основе предварительных объявлений в заголовочных файлах, заключается в том, что они избегают ненужных зависимостей. т.е. представьте, что Bh вперед объявляет об импорте A и Bm. А затем представьте, что Cm, Dm, Em и Fm импортируют Bh. После того, как все это будет сделано, Ah изменится. Так как A объявлен только вперед в Bh, только Bm необходимо перестроить. Без предварительных деклараций Cm, Dm, Em и Fm должны были бы быть перестроены, если A изменится
Пример:
.h
файл:
@class BarClass;
@interface FooClass : NSObject
...
@end
.m
файл
#import "BarClass.h"
@implementation FooClass
...
@end
.h
файл - общедоступныйinterface
класса.m
файл - частныйimplementation
класса
Мои правила:
- Предварительная декларация [О компании] -
@class
внутри.h
файл - Вам следует сократить импорт в
.h
- Акцент должен быть на импорте в
.m
файл, который предотвращает проблемы с зависимостями
Когда тебе что-то нужно в implementation
тогда вы должны импортировать его в .m
. Когда тебе что-то нужно вinterface
тогда вы должны импортировать его в .h
.
Подробнее об импортных угловых скобках<>
и кавычки ""