我想编写一个没有 Cocoa 或 GNU 的 Object.h
的 Objective-C 类(用于教育目的)。我在网上查了一下,在我看来,很多人们期望“随语言而来”的东西,比如类和消息发送,实际上是在第三方编写的文件中定义的,比如 objc -runtime.h
.
是否有关于什么是真正纯 Objective-C 以及什么是运行时/框架的一部分的文档?在不使用任何第三方代码(例如 Object.h
或 objc-runtime.h
)的情况下,我必须实现什么功能才能获得工作环境(再次注意,这是用于教育目的,而不是用于生产代码)?
感谢您的任何见解!
最佳答案
真的,如果您不从 NSObject
继承,您唯一必须照顾好自己的就是对象的创建和销毁;不管它们的父类如何,方法在其他方面的行为都是相同的。 KVC 和内存管理等功能是 OpenStep/Cocoa 的功能,但不需要作为语言的一部分。
这是一个从头开始的类:
@interface MyClass { // note the lack of a superclass here
@private Class isa;
}
+ (MyClass *)create;
- (void)destroy;
- (int)randomNumber;
@end
@implementation MyClass
+ (MyClass *)create {
return class_createInstance(self, 0);
}
- (void)destroy {
object_dispose(self);
}
- (int)randomNumber {
return rand();
}
@end
下面是它的使用方法:
int main(int argc, char **argv) {
MyClass *foo = [MyClass create];
if (foo) {
printf("random! %i\n", [foo randomNumber]);
[foo destroy];
}
}
编辑:如果您甚至不想使用 class_createInstance()
和 object_dispose()
,则必须实现等效项手动,以及 class_getInstanceSize()
的等价物,这样您就可以知道一个对象占用了多少内存。但即使你做到了这一点,也不要认为你已经逃脱了 Objective-C 运行时!消息调度仍然完全建立在运行时的 C 函数之上,而 Objective-C 语法在编译期间转换为对这些函数的调用。
关于objective-c - 从头开始编写 Objective-C 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6154154/