美文网首页
runtime的理解

runtime的理解

作者: 43b86d3b5040 | 来源:发表于2017-04-08 23:32 被阅读16次

runtime是oc的一种代码运行机制,我们程序中执行的代码最终都会以c语言的形式执行,例如:[target doSomething] 在运行中会被转换成 objc_msgSend(target,@selector(doSomething));
对象在runtime中都以结构体的形式体现

struct objc_class {
    Class isa;//指针,顾名思义,表示是一个什么,
    //实例的isa指向类对象,类对象的isa指向元类
    
#if !__OBJC2__
    Class super_class;  //指向父类
    const char *name;  //类名
    long version;
    long info;
    long instance_size
    struct objc_ivar_list *ivars //成员变量列表
    struct objc_method_list **methodLists; //方法列表
    struct objc_cache *cache;//缓存
    //一种优化,调用过的方法存入缓存列表,下次调用先找缓存
    struct objc_protocol_list *protocols //协议列表
#endif
} OBJC2_UNAVAILABLE;

下面我们通过oc中方法的调用来了解一下runtime的过程

如果用实例对象调用实例方法,会到实例的isa指针指向的对象(也就是类对象)操作
如果调用的是类方法,就会到类对象的isa指针指向的对象(也就是元类对象)中操作

  1. 首先,在相应操作的对象中的缓存方法列表中找打调用的方法,如果找到,转向相应的实现并执行。
  2. 如果没找到,在相应操作的对象中的方法列表中找调用的方法,如果找到,转向相应实现并执行。
  3. 如果没找到,去父类指针所指向的对象中执行1 2
  4. 以此类推,如果一直到根类还没找到,转向拦截调用。
  5. 如果没有重写拦截调用方法,程序报错。

也就是说如果继承重写父类的方法,并不会将父类方法覆盖,只是在当前子类找到了该方法,不再继续找了。

用runtime可以做什么?
一般的开发中用不到,只有一些特殊场景,比如通过objc_setAssociatedObject扩展对象的属性,而又不使用继承方案,或使用method_exchangeImplementations来执行自己的方法,而不执行系统类的方法。

基本参考这里;

相关文章

  • IOS学习笔记--RunTime的理解

    IOS学习笔记--RunTime的理解 RunTime的理解 runtime:运行时刻是指一个程序在运行(或者在被...

  • runtime之ivar内存布局篇

    随着runtime越来越常用,iOSer对runtime的理解要求也越来越高,大家都热衷于runtime源码理解,...

  • 深入理解Java Runtime Area Java运行时数据区

    Java Runtime Area的分类从线程的角度理解Java Runtime Area从存储内容理解Java ...

  • Block 的总结

    要理解Block的实现,要先理解runtime,然而理解Runtime要先理解C语言的结构体(可见我基础是TM有多...

  • Vue --- Runtime + Compiler vs. R

    学习目标:一、理解Runtime + Compiler vs. Runtime-only二、如何设置Runtime...

  • iOS~runtime

    iOS~runtime理解iOS runtime学习笔记Objective-C Runtime让你快速上手Runt...

  • Objective-C Runtime:深入理解成员变量与属性

    Objective-C Runtime:深入理解成员变量与属性 Objective-C Runtime:深入理解成...

  • Runtime 的理解

    Runtime是深入学习OC的必经之路,所以花了一些时间研究了一下。 一、介绍RunTime(运行时): OC 语...

  • runtime的理解

    runtime是oc的一种代码运行机制,我们程序中执行的代码最终都会以c语言的形式执行,例如:[target do...

  • Runtime 理解

    Runtime Runtime 就是去解决如何在运行时期找到调用方法。 (OC 是一门动态语言,函数调用变成了消息...

网友评论

      本文标题:runtime的理解

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