美文网首页
【译】runtime编程指南_03和runtime交互

【译】runtime编程指南_03和runtime交互

作者: xiao333ma | 来源:发表于2016-09-10 15:24 被阅读35次

    和runtime交互

    Objective-C 程序和 runtime 系统有三种不同级别的交互。

    1. 通过 Objective-C 源代码
    2. 通过 Foundation frameworkNSObject 类定义的方法。
    3. 直接调用 runtime 方法。

    Objective-C 源代码

    大多数情况,runtime 默默无闻的在幕后自动工作。你仅仅需要书写和编译 Objective-C 代码即可。

    当你编译包含 Objective-C 类和方法的时候,由于这门语言的动态特性,编译器将生成数据结构和方法调用。数据结构捕获了 class 的信息, category 的定义,protocol 的声明;他们包含了那些在 The Objective-C Programming Language 中定义和声明的 classprotocol,实例变量,方法选择器,以及其他从源代码中提取的信息。最重要的 runtime 方法就是发送消息,它被消息表达式所执行。 详见 Message

    NSObject 方法

    Cocoa 中,大多数类继承与 NSObject ,大多数对象继承他定义的方法(NSProxy 是一个例外)详见Message Forwarding。由于这种关系,每个对象和实例都有方法。然而,NSObject 仅仅定义了一些某些应该做的方法模板,它不提供所有必须的代码。

    例如,NSObject 定义了一个 description,这个方法用来返回描述这个类的字符串。在 GDB 调试的时候,打印一个对象的时候输出的字符串就是从这个方法返回的。NSObject 并不知道这个类包含什么,所以只是返回这个类的名字和地址。NSObject 的子类可以实现这个方法来返回更多的信息。例如 NSArray 这个类返回了它所包含的数据列表。

    NSObject 的一些方法用于查询 runtime 系统的一些信息。这些方法允许对象执行自我检查。一些方法是类的实例方法,用来询问对象来确定它的类;isKindOfClass: isMemberOfClass: 用来测试这个对象在继承链中的层级;respondsToSelector: 用来指示这个对象是否可以接收一个特定的消息;conformsToProtocol: 用来指示这个对象是否实现了具体协议的方法;methodForSelector: 用来返回实现该方法的地址。这些方法给了对象来确定自己的能力。

    运行时方法

    runtime 是一个动态的共享库, /usr/include/objc 目录下的头文件提供了这些方法和数据结构。大多数的方法允许你用纯 C 的方式去实现编译器在处理你的 Objective-C 代码时所做的工作。其他的基础方法导出到了 NSObject 类中。这些方法使得开发其他 runtime 接口和工具成为了可能。当用 Objective-C 编码的时候,并不需要这些。但是当用 Objective-C 编码的时候,runtime 可能更好用。所有的方法都在 Objective-C Runtime Reference

    相关文章

      网友评论

          本文标题:【译】runtime编程指南_03和runtime交互

          本文链接:https://www.haomeiwen.com/subject/triyettx.html