由对象C中的前向声明引起的循环引用和警告

时间:2011-03-31 13:15:31

标签: objective-c warnings

我有两个相互引用的类,因此需要一个前向声明来避免循环引用。由于前向声明,我在尝试引用具有前向声明的类的类名或属性时会收到各种警告。有什么建议?关键的限制是我需要保持让类​​相互引用的能力

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

3 个答案:

答案 0 :(得分:7)

ClassB.m中,您需要#import "ClassA.h"@class转发声明只适用于头文件。

答案 1 :(得分:0)

标题只需要知道ClassA和ClassB存在,因此前向声明有效。

然而,在实施过程中,他们需要了解更多有关其他课程的信息。因此,在实现文件中,您需要#import其他类。你没有问题,因为一个类的实现只需要知道另一个类的接口,

答案 2 :(得分:0)

在标题中不使用import / include但使用@class指令。它基本上告诉“有一个名为X的类在某处定义”