gpt4 book ai didi

objective-c - #import 不能防止循环调用?

转载 作者:行者123 更新时间:2023-12-04 03:23:16 28 4
gpt4 key购买 nike

我有两个类 ClassA 和 Class B(它们是 viewControllers)。
A 类是 B 类的委托(delegate)。
ClassA“laucnhes”和 ClassB 的实例。
ClassB 调用 classA 的方法。

假设它是:

#import "ClassB.h"

@interface ClassA : NSObject {
ClassB* subController;
}

- (void) doThis;

-------------------------------

#import "ClassA.h"

@interface ClassB : NSObject {
ClassA* delegate;
}

-------------------------------

@implementation ClassB

- (void) someMethod {
AnObject* myObj = [self.delegate.arr objectAtIndex:8];
[self.delegate doThis];
}

这样做,A 必须导入 B,B 必须导入 A。

如果 B 不导入 A(仅使用 @class A),则使用 A 的属性会出现编译错误。
如果 B 导入 A,则 ClassA* delegate 行会出现编译错误。

为什么会出现这些编译错误? #import 不会再次保护递归调用吗?

我不需要解决该问题的解决方案,我知道我该怎么做。
但我想知道为什么我的#import 会导致这些问题。这些不是#includes...

最佳答案

在.h 文件中更喜欢@class 而不是#import。然后两者都可以导入到 .m 实现文件中。

// ClassA.h -------------------------------
@class ClassB;
@interface ClassA : NSObject {
ClassB* subController;
}

- (void) doThis;

// ClassB.h -------------------------------
@class ClassA;
@interface ClassB : NSObject {
ClassA* delegate;
}

// ClassB.m -------------------------------
#import "ClassA.h"
#import "ClassB.h"

@implementation ClassB

- (void) someMethod {
AnObject* myObj = [self.delegate.arr objectAtIndex:8];
[self.delegate doThis];
}

使用@class 语句而不是#import 也减少了依赖关系并使其余的更加清晰。它还可以加快编译时间。

关于objective-c - #import 不能防止循环调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7602280/

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