在一个.h和.m文件中定义多个Objective-C类

12

我有两个子类,一个有很多自定义内容,我们称之为Foo,另一个子类只需要覆盖1个方法,而且不需要任何额外的变量,我们称之为Bar。

Bar将是Foo的变量之一,因此为了避免使用2个以上的文件(.m和.h文件),我想在Foo的.h和.m文件中接口并实现Bar。

我的最佳努力却导致了几个编译器错误。

.h文件如下:

#import <UIKit/UIKit.h>

@interface Foo : FooSuperClass {
    Bar *barVariable;
}

@property (nonatomic, retain) Bar *barVariable;

-(void) fooMethod;
@end

@interface Bar : BarSuperClass {
}

@end

.m文件长这样:

#import "Foo.h"


@implementation Foo
@synthesize barVariable;

-(void) fooMethod{
  //do foo related things
}
@end

@implementation Bar
- (void)barSuperClassMethodIWantToOverride{
}
@end

我意识到这种做法通常会受到谴责,但我认为在我的情况下是适当的。我得到的第一个错误是“在 Bar 之前需要指定符号限定符列表”。

我做错了什么?我相当确定在单个文件中可以有多个声明/定义。

2个回答

30
编译器只会认可它之前看到的类型。正如尼古拉所提到的那样,您可以在声明 Foo 之前声明 Bar
然而,并非总是这样。对于其他情况,您可以使用 @class 进行类的前向声明。
例如:
@class Bar;
@interface Foo : NSObject
{
    Bar *bar;
}
@end

@class Bar;告诉编译器存在一个名为Bar的类,并且Bar指针应该被视为有效。


9
在您的头文件中,在声明 Bar 之前使用了它。解决方案:将 Bar 的定义放在 Foo 的定义之前。

9
最好使用@class指令。比如,如果在Bar中声明了一个类型为Foo的实例变量,那么会发生什么? - Alex Rozanski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接