【问题标题】:Forward declaration for classes called within method arguments of a protocol definition在协议定义的方法参数中调用的类的前向声明
【发布时间】:2018-10-24 07:54:31
【问题描述】:

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

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

假设我有以下内容:

ClassAlpha.h

@interface ClassAlpha: NSObject

-(void)helloWorld;

@end

ProtocolA.h

@protocol ProtocolA <NSObject>

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

@end

ClassBeta.h(符合协议 A)

@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 的导入语句,不用说 ClassBeta 就不需要这样做。这种情况下的最佳做法是什么?

【问题讨论】:

    标签: ios class protocols forward-declaration


    【解决方案1】:

    您应该尽可能避免在标题中使用#import。所以,是的,您应该在PrototolA.h 中使用ClassAlpha 的前向声明(即@class ClassAlpha;),因为要在参数声明中使用ClassAlpha * 作为类型,您只需要知道ClassAlpha 是一个类的名称。你不需要知道它是如何声明的。是的,您应该在ClassBeta.m 中导入ClassAlpha.h;您应该尽可能在实现文件中而不是头文件中进行导入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 2013-04-12
      相关资源
      最近更新 更多