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

Ano*_*ser 5 objective-c

文件说:

虽然不是严格意义上的语言的一部分,但isa指针是对象使用Objective-C运行时系统所必需的.在结构定义的任何字段中,对象需要与struct objc_object(在objc/objc.h中定义)"等效".但是,您很少(如果有的话)需要创建自己的根对象,并且从NSObject或NSProxy继承的对象会自动拥有isa变量.

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

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

小智 7

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

@interface MyNewRoot {
Class isa;
}
@end
Run Code Online (Sandbox Code Playgroud)

VS

@interface MyObject : NSObject {
}
@end
Run Code Online (Sandbox Code Playgroud)

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

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