gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:36:33 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com