zoukankan      html  css  js  c++  java
  • IOS runtime运行机制详解(一)

    OC运行机制是指,可以运行的时候动态调用函数。因为C语言必须在编译的时候就决定调用哪个函数。

    我们平时写的OC代码,它在运行的时候也是转换成了runtime的方式运行的。任何方法调用本质:就是发送一个消息。(用runtime发送消息,OC底层通过runtime实现)每一个OC的方法,底层必然有一个与之对应的runtime运行方法。也就是说任何方法调用,都是转换为消息机制。

    面试题:说说IOS 消息机制方法调用的过程:

    1.OC在向一个对象发送消息时,runtime库会根据对象的isa指针来找到这个对象对应的类,或者父类中查找对应的方法。

    2.注册方法编号(用编号的好处就是可以快速的查找)。

    3.根据方法编号去查找对应的方法。

    4.找到最终实现函数的地址,根据地址去方法区去调用对应的函数。

    那么,一个OC对象的isa指针指向什么?有什么作用?

    每个对象的内部都有一个isa指针,这个指针是指向他的真实类型。根据这个类的指针就能知道将来调用哪个类的方法。

    总结:

    1.每一个类本质上都是一个类的实例。其中类定义了成员变量和成员方法的列表。对象通过isa指针指向所属的类。

    2.每一个类本质上都是一个对象。类其实是元类(meteClas)的实例。元类定义了类方法的列表。类通过类isa指针指向元类。

    3.元类保存了类方法的列表。当类方法被调用的时候,会先从本身查找类方法的实现,如果没有找到,元类会向其父类查找该方法。需要注意的是,元类也是类,也是一个对象。

    4.元类通过其isa指针指向他的根元类。(root meteClass)

    5.根元类的isa指针指向了他本身。这样行程了一个封闭的内循环。

  • 相关阅读:
    JVM致命错误日志(hs_err_pid.log)解读
    ant+proguard签名打包 .jar
    ProGuard之——代码混淆
    Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密
    利用Ant与Proguard混淆
    Ant在Java项目中的使用(一眼就看会)
    Native2Ascii文件转换 -- 待完善
    scp 的时候提示WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    logback与log4j比较
    腾讯、百度、阿里面试经验—(3)阿里面经
  • 原文地址:https://www.cnblogs.com/howlaa/p/10711625.html
Copyright © 2011-2022 走看看