使用extern @class添加类别?

时间:2014-04-01 23:11:56

标签: objective-c class import extern

有没有办法“承诺某个类存在于其他地方”(即类似于extern keyword),因此避免使用#import语句?

这是我想要做的一个例子:

extern @class MyClass;

@interface Foo : NSObject
@property (nonatomic) MyClass *abc;
@end

MyClass肯定存在且在整个程序中使用,但在我创建此文件时,我不知道定义MyClass的文件的名称。

更新:似乎错误与此类别相关。更新后的代码如下:

@class MyClass;

@interface MyClass (Extensions)
- (void)foo;
@end

给出以下错误:

  

无法为未定义的类'MyClass'定义类别。

2 个答案:

答案 0 :(得分:3)

您只需执行以下操作即可“转发声明”类:

@class MyClass;

当你真正去使用这个课时,你仍然需要导入标题。

但是,在为类进行子类化或添加类别时,必须使用导入。编译器必须能够看到真正的类才能修改或扩展它。

“扩展”无法直接导入文件的类的唯一选择是使用objective-c运行时库在运行时修改类。您可以创建另一个类,然后在运行时将该类的方法添加到实际类中。

基本上你会使用NSClassFromString获取类,然后使用class_addMethod将这些方法添加到真实类中。

对于你想要做的任何事情来说,这几乎肯定是过度杀伤。

答案 1 :(得分:0)

是的,这正是@class指令的用途(没有extern部分)。