Всегда ли неуместно # импортировать больше, чем абсолютно необходимо в Objective-C интерфейсов?

Мне хорошо известно, что общее практическое правило заключается в том, что вы должны импортировать только то, что необходимо - интерфейсы базовых классов, интерфейсы протоколов и т. Д. - для компиляции класса и использования @class для все, что может быть заявлено заранее. Однако я столкнулся со следующим сценарием, в котором мне показалось, что #import было более подходящим решением:

#import "ClassA.h"      // Previously, @class ClassA;
#import "ClassB.h"      // Previously, @class ClassB;
#import "ClassC.h"      // Unnecessary to forward-declare

@interface ClassD : NSObject

@property (nonatomic, retain) ClassA *  classAObject;
@property (nonatomic, retain) ClassB *  classBObject;
@property (nonatomic, copy)   NSArray * classCObjects;

@end

Сначала Я просто объявил пересылку ClassA и ClassB (поскольку компоненты classCObjects относятся к ClassC только по контракту). Это было моим первоначальным инстинктом.

Но после попытки использовать ClassD в другом месте я быстро понял, что мне также нужно импортировать ClassA , ClassB и ClassC вместе с ClassD везде, где я его использовал. Это похоже на то, что другому классу не следует заботиться при использовании ClassD . Я думал, что, по сути, пользователь ClassD должен заботиться только об импорте ClassD.h и предполагать, что он может работать со всем классом без кучи других # операторы import . Учитывая вышеупомянутый подход, я в основном включил все необходимое для работы в домене ClassD прямо в его интерфейс.

Есть ли веская причина, по которой этот подход не идеален, за исключением «вы» Включено ли больше, чем абсолютно необходимо для компиляции? "

7
задан CIFilter 8 February 2011 в 20:07
поделиться