gpt4 book ai didi

objective-c - 前向声明和头文件的问题

转载 作者:搜寻专家 更新时间:2023-10-30 20:10:04 24 4
gpt4 key购买 nike

为了减少我的构建时间并使我的代码尽可能简洁,我一直在我的头文件中使用前向声明并将我的 #import 放在我的实现文件中的语句。到目前为止,这一直很好用,但是我遇到了一个问题。假设我有一个类 MyClass返回类 Widget 的对象,例如:

@interface MyClass : NSObject
-(Widget*)widgetWithName:(NSString*)name;
@end

假设Widget有一个方法 -(void)arbitraryMethod;

现在,假设我正在实现一个导入 MyClass.h 的类, 实例化一个 MyClass对象,执行 widgetWithName: , 然后尝试发送 arbitraryMethod消息返回 Widget , 我收到错误 receiver type "Widget" for instance message is a forward declaration .所以,我必须继续导入 Widget.h修复错误的头文件。

当然,当我返回时,这绝不是问题 Foundation类因为#import <Foundation/Foundation.h>Prefix.pch .

最佳做法是什么?我的直觉是,如果我要返回一个类或将该类用作公共(public)方法中的参数,则头文件应该包含在我的头文件中。否则,如果我有一个类在面向公众的方法中使用十个不同的非基础类,我的用户每次想要使用该方法时都必须寻找新的头文件并将其导入到他们的项目中。

这是正确的还是有更好的模式可供使用?

最佳答案

您不能跳过在您的 header 中导入 header ,以至于您不为您在返回类型中使用的类导入 header 。我假设您在这种情况下会在 MyClass 的 header 中使用 @class Widget;。您不能在类型仅使用 @class 向前声明的对象上调用方法,因为我记得 bbum saying ,编译器没有必要的数据。除了通过使用 @class 告诉它“它存在”之外,您基本上没有告诉它任何关于该类的信息,这通常只用于破坏循环引用。我认为尽可能干净地为您在实现中内部使用的类导入 header ,但正如您所说,导入用作 header 中公共(public)方法的返回和参数类型的任何类的 header 。

关于objective-c - 前向声明和头文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14201199/

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