美文网首页
三、RunTime

三、RunTime

作者: Miss_DQ | 来源:发表于2021-07-14 08:48 被阅读0次

注:本文集为自己准备面试时,系统复习的笔记,如大家有兴趣,欢迎阅读并指正


image.png

对象、类对象、元类对象

类对象:存储实例方法列表等信息。
元类对象:存储类方法列表等信息。


image.png

消息传递

void objc_msgSend(self,@selector(class))
void objc_msgSendSuper(super,@selector(class))

消息传递流程图

缓存查找:
例:给定值是SEL,目标值是对应bucket_t中的IMP?通过哈希查找cache_key_t -> bucket_t
当前类中查找:
1.对于已排序好的列表,采用二分查找算法查找方法对应执行函数。
2.对于没有排序的列表,采用一般遍历进行查找
父类逐级查找:


image.png

消息转发

image.png

Method-Swizzing

方法交换

动态添加方法

erformSelector:编译时无该方法,运行时执行该方法

class_addMethod(self,@selector(test),testImp,@"v@:");

动态方法解析

@dynamic 运行时给属性添加setter和getter方法

  • 动态运行时语言将函数决议推迟到运行时。
  • 编译时语言在编译期进行函数决议。

Runtime实战

  • [obj foo]和objc_msgSend()函数之间有什么关系?
    运行时[obj foo]实际执行的是objc_msgSend(self ,@selector(foo));
  • runtime如何通过Selector找到对应的IMP地址的?
    先找当前实例的缓存,如果命中返回,没有返回在类的方法列表中查找,如果没有命中,在逐级查找父类的方法列表。
  • 能否向编译后的类中添加实例变量?
    不能,可以给动态添加的类添加实例变量

相关文章

  • runtime底层实现原理

    一、Runtime介绍二、Runtime源码初探三、Runtime消息传递四、Runtime消息转发五、Runti...

  • Runtime の滥用典型

    不要滥用Runtime !!!不要滥用Runtime !!!不要滥用Runtime !!! 重要的事说三遍?。 先...

  • iOS知识点(13)Runtime

    让你快速上手Runtime 神经病院Objective-C Runtime出院第三天——如何正确使用Runtime...

  • Runtime(三)

    Objc中发送消息是把接受者和消息用中括号括起来,而直到运行时才把消息与方法实现绑定。 objc_msgSend函...

  • runtime(三)

    objc_msgSend执行流程 本文Demo代码见gitHubDemo 我们先来看看一个小例子 要想实现看底层的...

  • 三、RunTime

    注:本文集为自己准备面试时,系统复习的笔记,如大家有兴趣,欢迎阅读并指正 对象、类对象、元类对象 类对象:存储实例...

  • Runtime(三)方法交换

    Runtime(三)方法交换 在刚开始关注Runtime时, 不知道小伙伴们是否听过一种传说 Runtime是Ob...

  • iOS - Runtime相关

    一.什么是 runtime ? 二.runtime的头文件 三.消息发送步骤 四.常用方法 五.应用

  • iOS 常见知识点(一):Runtime

    iOS 常见知识点(二):RunLoop iOS 常见知识点(三):Lock Runtime Runtime 是一...

  • Runtime深入了解

    前言 一、Runtime版本与平台介绍 二、使用Runtime的场景 三、消息机制(Messaging) 四、动态...

网友评论

      本文标题:三、RunTime

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