objective-c - 在 Objective-C 接口(interface)中 #import 是否总是不合适?

标签 objective-c class import forward-declaration

我很清楚一般的经验法则是你应该只导入必要的东西——基类接口(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

起初,我简单地转发声明了ClassAClassB(因为classCObjects的组件是ClassC 仅按契约(Contract))。这是我最初的直觉。

但是在尝试在别处使用 ClassD 之后,我很快意识到我还必须导入 ClassAClassBClassC 连同 ClassD 在我使用它的所有地方。这似乎是另一个类在使用 ClassD 时不必关心的事情。我的想法是,基本上,ClassD 的用户实际上应该只关心导入 ClassD.h 并假设它可以与整个类一起工作而无需一堆其他 #import 语句。鉴于上述方法,我基本上已经在其界面中包含了在 ClassD 域内工作所需的一切。

是否有充分的理由说明这种方法不理想,除了“您包含的内容超出了编译绝对必要的范围?”

最佳答案

虽然您通常遵循的策略——不要导入不必要的东西——是很棒的、优雅的风格,并且总体上是一个很好的目标,但不要对棘手的案例过多担心。只需 #import 您需要的即可。

实际上,在现代机器上,过度#importing 的唯一影响是为您的编译时间增加几微秒,这是无法观察到的。使用您将节省的开发人员时间来让您的应用程序更棒。 :)

关于objective-c - 在 Objective-C 接口(interface)中 #import 是否总是不合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4937687/

相关文章:

mysql - mysqldump < 做什么?直播网站数据库错误,差点尿裤子

mysql - 如何使用 Windows 任务计划程序导入 CSV 或使用命令提示符计划任务

objective-c - 使计算器上的加号/减号按钮起作用的方法

objective-c - xcode中项目/目标的单独设置是什么意思?

ios - 使用 AVFoundation 将自定义元数据添加到视频

javascript - ExtJS 4 - 从动画监听器调用 javascript 类方法失败

objective-c - hello world 中架构 x86_64 的 undefined symbol

类中的c++模板

C++ 'struct' 和 'class' 之间的所有区别?

javascript - 将本地组件文件导入我的 LoginForm 组件时出错