美文网首页
Objective-C Runtime机制 - 方法的调用

Objective-C Runtime机制 - 方法的调用

作者: 9d8c8692519b | 来源:发表于2018-11-27 14:40 被阅读18次
在这里需要先了解几个概念

SEL

SEL是objc_selector类型指针,是根据特定规则生成的方法的唯一标识。需要注意的是,只要方法名相同,生成的SEL就相同,与这个方法属于哪个类没有关系。

typedef struct objc_selector *SEL;

IMP

如果说,SEL是方法名,那么IMP就是方法的实现。IMP指针定义了一个方法的入口,指向了实现方法的代码块的内存地址。

typedef id (*IMP)(id, SEL, ...);

objc_method

在objc中,方法实质上是一个objc_method指针。其中,method_name相当于objc_method的hash值,runtime通过method_name找到相应的方法入口(method_imp),从而执行方法的代码块。

struct objc_method {
SEL method_name OBJC2_UNAVAILABLE;
char *method_types OBJC2_UNAVAILABLE;
IMP method_imp OBJC2_UNAVAILABLE;
} OBJC2_UNAVAILABLE;

调用一个方法时具体做了什么?

在Objective-C中,方法的调用采用如下方式:

[object methodWithArg:arg];

在编译期间,以上代码会被转化为

objc_msgSend(object, methodWithArg, arg)

可以把它看作是发送消息的过,其中object为消息的接收体,它可能是一个对象,也可能是一个类。若为对象,则是实例方法(- 方法);反之,则是类方法(+方法)。mehodWithArg、arg是具体的消息内容。
object接收到消息之后,若是实例方法,则会从其所属的类Subclass(class)的methodLists去寻找methodWithArg:方法。若未找着,则到其父类Superclass(class)的methodLists中寻找。以此类推,直到根类NSObject,若仍未找着,就crash。
同理,若是类方法,则从对象所属类的meta class开始寻找。

相关文章

  • 方法调用底层实现

    runtime怎么实现方法的调用 :消息机制,runtime系统会把方法调用转化为消息发送。即objc-msgSe...

  • iOS面试-Runtime简介

    本文主要介绍runtime的五点 Runtime简介 Runtime(消息机制) Runtime方法调用流程 Ru...

  • runtime的实用性讲解

    runtime 概念 runtime 运行时机制,主要是消息机制。OC 中的方法调用属于消息的发送,动态调用过程,...

  • 深入理解runTime

    Objective-C Runtime 引言 Objective-C的方法调用实则为“发送消息”,我们来看[dog...

  • Runtime主要用处

    深入理解Objective-C Runtime机制 一:消息转发流程和机制 1、实例方法:本类的缓存方法列表->本...

  • Objective-C Runtime机制 - 方法的调用

    在这里需要先了解几个概念 SEL SEL是objc_selector类型指针,是根据特定规则生成的方法的唯一标识。...

  • Runtime 消息机制

    Objective-C Runtime 消息机制 最近在找工作,Objective-C中的Runtime是经...

  • Runtime消息机制

    什么是Runtime 在对象上调用方法是Objective-C中经常使用的功能,用Objective-C的术语来说...

  • iOS探索

    运行时:深入理解Objective-C的Runtime机制Objective-C Runtime你真的了解 loa...

  • iOS复习笔记

    runtime机制 objective-c代码总是先预编译成C代码,runtime机制也是基于C的实现。消息机制是...

网友评论

      本文标题:Objective-C Runtime机制 - 方法的调用

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