我很清楚一般的经验法则是你应该只导入必要的东西——基类接口(interface)、协议(protocol)接口(interface)等——对于一个类来说编译和使用@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
仅按契约(Contract))。这是我最初的直觉。
但是在尝试在别处使用 ClassD
之后,我很快意识到我还必须导入 ClassA
、ClassB
和 ClassC
连同 ClassD
在我使用它的所有地方。这似乎是另一个类在使用 ClassD
时不必关心的事情。我的想法是,基本上,ClassD
的用户实际上应该只关心导入 ClassD.h
并假设它可以与整个类一起工作而无需一堆其他 #import
语句。鉴于上述方法,我基本上已经在其界面中包含了在 ClassD
域内工作所需的一切。
是否有充分的理由说明这种方法不理想,除了“您包含的内容超出了编译绝对必要的范围?”
最佳答案
虽然您通常遵循的策略——不要导入不必要的东西——是很棒的、优雅的风格,并且总体上是一个很好的目标,但不要对棘手的案例过多担心。只需 #import
您需要的即可。
实际上,在现代机器上,过度#import
ing 的唯一影响是为您的编译时间增加几微秒,这是无法观察到的。使用您将节省的开发人员时间来让您的应用程序更棒。 :)
关于objective-c - 在 Objective-C 接口(interface)中 #import 是否总是不合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4937687/