是否可以在没有超类的情况下在Objective-C中创建一个类。
如果我创建类似
的内容@interface Samp
@end
我收到错误消息:“在没有指定基类的情况下定义了类Samp”。 为什么NSProxy会编译?
答案 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。但是,在实践中,没有理由实现自己的根类。