• oc runtime


    run-time机制

    run-time是一个对象,保证了oc的动态属性。run-time自定义了一些数据结构和库方法,你能使用这些接口实现oc runtime系统进行交互,比如可以添加类和方法,在加载类的时候获得类的定义。

    不同的平台有不同的run-time版本

     oc程序和runtime系统在3个方面相互作用: 通过oc源码 通过foundation里定义的nsobject类 通过直接调用runtime方法

    大部分时候,runtime系统自动工作工作,你只需要编写和编译oc源码就可以了。当你编译包含oc的类和方法时,编译器创建数据结构和函数用以实现语言的动态属性

    runtime系统是一个包含了数据结构和方法的库,这些方法和数据结构声明在/usr/include/objc的头文件里。很多方法允许你使用纯c替代oc代码。这些函数让开发其他在runtime系统中开发其他接口和创造工具成为可能,在写oc时虽不需要但是一些runtime方法可能对你写oc代码有帮助。

    messaging:

    The objc_msgSend Function

    在oc里,message在runtime运行时才绑定到方法实现,objc_msgSend这个消息函数做了很多以保证其动态属性:

    1、它首先会去找selector方法的实现。由于相同的方法可以通过不同的类实现不同的实现,所以它找到的精确过程取决于接收方的类。

    2、调用实现,传值(数据指针),并为该方法指定任何参数

    3、将方法实现的返回值作为自己的返回值

    注意:编译器会直接生成的调用,而不需要程序员手动调用

    消息传递的关键在于编译器为每个类和对象构架的结构,每个类结构包含一下两个基本元素:

    1、父类指针

    2、类调用表。

    当一个消息传递给一个对象,消息传递函数遵循对象对类结构的ISA指针,它在调度表中查找方法选择器。

  • 相关阅读:
    [jenkins] 启动错误 Failed to start LSB: Jenkins Automation Server.
    SpringBoot AOP注解式拦截与方法规则拦截
    JS !function 稀奇古怪的写法
    业务场景后端优化
    对称加密和非对称加密
    第三篇 -- 余生,我累了,也懂了
    第二篇 -- 关东野客书籍
    第十一篇 -- 关于防火墙的一些问题
    第三十一篇 -- 学习第六十八天打卡20190911
    第二十九篇 -- UDP和TCP
  • 原文地址:https://www.cnblogs.com/symen/p/7472943.html
Copyright © 2020-2023  润新知