在Objective-C接口中#import是否总是不合适?

CIF*_*ter 7 import class objective-c forward-declaration

我很清楚,一般的经验法则是你应该只导入必要的 - 基类接口,协议接口等 - 用于编译和使用@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
Run Code Online (Sandbox Code Playgroud)

起初,我只是向前声明ClassAClassB(作为的成分classCObjectsClassC由合同只).这是我最初的直觉.

但是,试图使用后ClassD在其他地方,我很快就意识到,我必须也进口ClassA,ClassBClassC沿着ClassD到处我用它.这似乎是另一个类在使用时不应该关心的东西ClassD.我的想法是,基本上,一个用户ClassD应该真的只关心导入ClassD.h并假设它可以在没有一堆其他#import语句的情况下使用整个类.鉴于上述方法,我基本上已经包含了ClassD在其界面中正确的域内工作所需的一切.

是否有一个强有力的理由说明这种方法并不理想,除了"你所包含的内容不仅仅是编译所必需的?"

Ben*_*tto 10

虽然你通常遵循的策略 - 不要输入超过必要的 - 是令人敬畏的,优雅的风格和一般的目标,不要过多地惹恼棘手的案件.只是#import你需要什么.

实际上,在现代机器上,唯一的影响#import是在编译时添加一些不可观察的微秒.使用您节省的开发人员时间,使您的应用程序更加美观.:)