美文网首页
runtime运行时初探(消息机制原理)

runtime运行时初探(消息机制原理)

作者: 愿红尘作伴 | 来源:发表于2017-02-13 21:54 被阅读0次

运行时简介:

runtime简称运行时,oc就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数;
对于OC的函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用

事实证明:

1.编译阶段,oc可以调用任何函数,即使这个函数并未实现,只要声明过就不会报错
2.在编译阶段,C语言调用未实现的函数就会报错

runtime作用

1.发送消息

方法调用的本质,就是让对象发送消息。
objc_msgSend,只有对象才能发送消息,因此以objc开头.
使用消息机制前提,必须导入#import <objc/message.h>

创建person对象
    Person *p = [[Person alloc] init];

    // 调用对象方法
    [p eat];

    // 本质:让对象发送消息
    objc_msgSend(p, @selector(eat));

    // 调用类方法的方式:两种
    // 第一种通过类名调用
    [Person eat];
    // 第二种通过类对象调用
    [[Person class] eat];

    // 用类名调用类方法,底层会自动把类名转换成类对象调用
    // 本质:让类对象发送消息
    objc_msgSend([Person class], @selector(eat));
    更底层一些
    objc_msgSend(objc_getClass("Person")),sel_registerName("eat"),)

既然这么麻烦,为啥仍然要使用runtime?

可以用runtime调用一些私有方法,比如其他同事写的方法没有暴露接口,系统一些私有方法都可以通过这种msgSend的方式通过底层来实现
(补充:objc_msgSend([Person class], @selector(eat:),参数名); 可以调用带参数的方法)

那么方法的调用流程是什么样子的呢?

1.对面通过自己的isa指针去寻找自己所属的类
2.注册想要调用方法的编号sel_registerName
3.根据方法的编号去找寻对应的方法 (通过编号去查找可以更加效率,而不是直接通过字符串去查找不是很效率)

相关文章

  • 深入浅出Runtime

    Runtime运行时 目录 一、runtime 简介二、消息机制<了解>2.1 消息机制原理2.2 消息调用流程三...

  • iOS runtime理解

    一、runtime原理runtime:简称运行时,因为OC就是运行时机制,最主要的是消息机制。对于C,函数的调用在...

  • Runtime的原理和使用

    Runtime的原理和使用 runtime简介 runtime简称运行时。OC就是运行时机制,其中最主要的是消息机...

  • runtime运行时初探(消息机制原理)

    运行时简介: runtime简称运行时,oc就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制。对...

  • iOS - RunTime的简单使用以及说明

    Runtime(消息机制) 都知道runtime就是运行时,OC也是运行时机制的,runtime说简单也简单,说难...

  • RunTime

    前言 RunTime简称运行时机制,其实OC就是一种运行时机制(消息机制是运行时机制中最重要的机制) 消息机制:任...

  • IOS开发谈谈对Runtime 和 Runloop的理解

    Runtime Runtime简称运行时,OC就是运行时机制,也就是在运行时候的一些机制,其中最重要的事消息机制。...

  • IOSRunTime_方法交换

    RunTime_运行时详解 运行时机制: 消息发送机制: RunTime 运行时:苹果提供了一个API,属于C语言...

  • iOS面试题常问问题

    第一题:运行时机制的原理和运用场景? 原理:runtime 运行时,OC就是基于此开发和支持运行的。例如消息发送机...

  • Runtime学习与总结

    一 : Runtime简介 Runtime简称运行时,OC就是运行时机制,其中最主要的是消息机制 对于C语言,函数...

网友评论

      本文标题:runtime运行时初探(消息机制原理)

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