gpt4 book ai didi

objective-c - 循环引用 - 协议(protocol)和子类

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

由于子类化或协议(protocol)定义,我在一些需要导入 header 的类之间遇到了一些循环引用(我认为)问题。我可以解释为什么要这样设置,但我不确定它是否必要。基本上,这些类管理相互对多的数据关系。

布局是这样的:
A 类导入 B 类,因为它是 B 类的委托(delegate)并且需要其协议(protocol)定义。
B 类导入 C 类,因为它是 C 类的子类。
C 类导入 A 类,因为它是 A 类的委托(delegate)并且需要其协议(protocol)定义。

下面是一些说明问题的示例代码。我得到的错误如下:在 A 类中 - “无法找到 Class_B_Delegate 的协议(protocol)定义”。在 B 类中 - “找不到 C 类的接口(interface)声明 - B 类的父类(super class)。”在 C 类中 - “找不到 Class_A_Delegate 的协议(protocol)定义”。

A 类 header :

#import <Foundation/Foundation.h>
#import "Class_B.h"

@protocol Class_A_Delegate
@end

@interface Class_A : NSObject <Class_B_Delegate> {
}

@end

B 类 header :

#import <Foundation/Foundation.h>
#import "Class_C.h"

@protocol Class_B_Delegate <NSObject>
@end

@interface Class_B : Class_C {
}

@end

C 类 header :

#import <Foundation/Foundation.h>
#import "Class_A.h"

@interface Class_C : NSObject <Class_A_Delegate> {
}

@end

最佳答案

您可以使用前向声明来打破依赖循环。参见 Referring to Other ClassesObjective-C Programming Guide .

因此 C 类 header 应如下所示:

#import <Foundation/Foundation.h>

@protocol Class_A_Delegate;

@interface Class_C : NSObject <Class_A_Delegate> {
}

@end

关于objective-c - 循环引用 - 协议(protocol)和子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2152861/

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