Objective-C中没有超类的类

时间:2014-03-06 02:24:55

标签: objective-c

是否可以在没有超类的情况下在Objective-C中创建一个类。

如果我创建类似

的内容
@interface Samp
@end

我收到错误消息:“在没有指定基类的情况下定义了类Samp”。 为什么NSProxy会编译?

2 个答案:

答案 0 :(得分:2)

迂腐的答案是肯定的,你可以。您只需要使您的类成为根类,您可以使用编译器属性objc_root_class来完成。

 __attribute__((objc_root_class))
@interface Samp
@end

或使用便利宏NS_ROOT_CLASS

NS_ROOT_CLASS
@interface Samp 
@end

这与NSProxy的做法相同。

NS_ROOT_CLASS
@interface NSProxy <NSObject> {
    Class   isa;
}

现在,除非你正在做一些非常具体的事情,否则我不明白为什么你会这样做。

Juts使您的类继承现有的根类,例如NSObject(最常见的)或NSProxy

答案 1 :(得分:2)

  

NSProxy如何编译?

NSProxy类是特殊的 - 它是Cocoa的两个公共根类之一(NSObject是另一个)。如果必须定义自己的根类this answer tells you how to do it。但是,在实践中,没有理由实现自己的根类。