文件说:
虽然不是严格意义上的语言的一部分,但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实例变量等时引用的注释.
| 归档时间: |
|
| 查看次数: |
1379 次 |
| 最近记录: |