如何在没有NSObject的Objective-C中创建根对象?

时间:2009-12-02 20:49:12

标签: objective-c

文档说:

  

虽然不是严格意义上的一部分   语言,isa指针是必需的   一个对象使用   Objective-C运行时系统。一个东西   需要与结构“等效”   objc_object(在objc / objc.h中定义)   在任何领域的结构   定义。但是,你很少,如果有的话,   需要创建自己的根对象,   和从NSObject继承的对象   或者NSProxy自动拥有isa   变量

虽然听起来不错,但我想知道如何在Objective-C中创建根对象?

这是出于学习目的。我只是想知道这一点。我真的很想看到它。

1 个答案:

答案 0 :(得分:7)

这实际上是一个“陷阱”,有些人从C#或Java风格的语言迁移到了。在声明你的类时,你根本没有指定一个超类,即

@interface MyNewRoot {
Class isa;
}
@end

VS

@interface MyObject : NSObject {
}
@end

在Java或C#中,这些是等效的(在第一种情况下,编译器会假定System.Object或java.lang.Object是超类),但在Objective-C中,不会假设这样的默认值,因此是新的root已创建。

但是,您现在负责为您的类通常认为理所当然的许多功能(甚至是简单的事情,例如用于分配或破坏新实例的内存管理等)。这是你在引用struct objc_object和isa实例变量等时引用的注释。