objective-c - 从头开始编写 Objective-C 类

标签 objective-c

我想编写一个没有 Cocoa 或 GNU 的 Object.h 的 Objective-C 类(用于教育目的)。我在网上查了一下,在我看来,很多人们期望“随语言而来”的东西,比如类和消息发送,实际上是在第三方编写的文件中定义的,比如 objc -runtime.h.

是否有关于什么是真正纯 Objective-C 以及什么是运行时/框架的一部分的文档?在不使用任何第三方代码(例如 Object.hobjc-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/

相关文章:

iphone - 如何删除 UISearchBar 中的工具提示

objective-c - 自定义 View 绘制一个矩形

ios - 旋转后 UIWebView 内容未调整到新框架

ios - 如何在不使用 Storyboard的情况下以编程方式导航 Objective-C 应用程序?

ios - UIAlertView 和 UILocalNotifications 一样有 fireDate 吗?

ios - 将谷歌分析与混合移动应用程序结合使用

ios - 如何避免 UITableView reloadData 中的竞争条件?

iphone - 如何使用日期对表格单元格上的行内容进行排序

iphone - 带有 "Go"按钮而不是返回的 iOS 键盘

ios - 滚动 TableView 时出现 EXC_BAD_ACCESS 错误