gpt4 book ai didi

ios - 在协议(protocol)定义的方法参数中调用的类的前向声明

转载 作者:行者123 更新时间:2023-11-28 23:46:17 25 4
gpt4 key购买 nike

前向声明用于减少依赖性并防止涉及多个头文件的不必要的导入。

话虽这么说,我应该如何处理这种情况?

假设我有以下内容:

ClassAlpha.h

@interface ClassAlpha: NSObject

-(void)helloWorld;

@end

ProtocolA.h

@protocol ProtocolA <NSObject>

-(void)doSomethingWithAlpha:(ClassAlpha *__Nonnull)alpha;

@end

ClassBeta.h(符合ProtocolA)

@interface ClassBeta: NSObject<ProtocolA>

@end

ClassBeta.m

#import "ClassAlpha.h"

@implementation ClassBeta

-(void)doSomethingWithAlpha:(ClassAlpha *)alpha
{
NSLog(@"Hello");
}
@end

在 ProtocolA.h 中,我应该使用 ClassAlpha 的前向声明吗?但是,如果我这样做,那将意味着 ClassBeta 必须是在其实现中导入 ClassAlpha 的那个,同时导入 ProtocolA。或者,如果我要在 ProtocolA 中使用 ClassAlpha 的 import 语句,不用说 ClassBeta 也不需要这样做。对于这种情况,最佳做法是什么?

最佳答案

您应该尽可能避免在 header 中使用#import。所以,是的,您应该在 PrototolA.h 中使用 ClassAlpha 的前向声明(即 @class ClassAlpha;),因为要使用 ClassAlpha * 作为参数声明中的类型,你只需要知道 ClassAlpha 是一个类的名称。您不需要了解有关它的声明方式的任何其他信息。是的,您应该在 ClassBeta.m 中导入 ClassAlpha.h;您应该尽可能多地在实现文件而不是头文件中导入。

关于ios - 在协议(protocol)定义的方法参数中调用的类的前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52620830/

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