我有两个相互引用的类,因此需要一个前向声明来避免循环引用。由于前向声明,我在尝试引用具有前向声明的类的类名或属性时会收到各种警告。有什么建议?关键的限制是我需要保持让类相互引用的能力
ClassA.h
#import "ClassB.h"
@interface ClassA : NSObject {
ClassB *class_b;
}
@end
ClassB.h
@class ClassA;
@interface ClassB : NSObject {
ClassA *class_a;
}
@end
ClassB.m
#import "ClassB.h"
@implementation ClassB
-(void)method{
}
- (id)init
{
(self = [super init]);
class_a = [[ClassA alloc] init];
return self;
}
@end
我得到的警告如下:
ClassB.m:13: warning: receiver 'ClassA' is a forward class and corresponding @interface may not exist
答案 0 :(得分:7)
在ClassB.m
中,您需要#import "ClassA.h"
。 @class
转发声明只适用于头文件。
答案 1 :(得分:0)
标题只需要知道ClassA和ClassB存在,因此前向声明有效。
然而,在实施过程中,他们需要了解更多有关其他课程的信息。因此,在实现文件中,您需要#import其他类。你没有问题,因为一个类的实现只需要知道另一个类的接口,
答案 2 :(得分:0)
在标题中不使用import / include但使用@class指令。它基本上告诉“有一个名为X的类在某处定义”