zoukankan      html  css  js  c++  java
  • 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指针,它在调度表中查找方法选择器。

  • 相关阅读:
    一行代码更改博客园皮肤
    fatal: refusing to merge unrelated histories
    使用 netcat 传输大文件
    linux 命令后台运行
    .net core 使用 Nlog 配置文件
    .net core 使用 Nlog 集成 exceptionless 配置文件
    Mysql不同字符串格式的连表查询
    Mongodb between 时间范围
    VS Code 使用 Debugger for Chrome 调试vue
    css权重说明
  • 原文地址:https://www.cnblogs.com/symen/p/7472943.html
Copyright © 2011-2022 走看看