c语言访问oc变量,OC中的方法调用流程

OC是一门动态语言,其方法调用方式与C++还是有很大区别的。

具体的方法调用过程,可以参考下面一片枫叶的博客,写的还是很详细的。

对于OC的方法调用,有两个点是重点:

1、对于OC的一切方法调用,最终会转换为类似下面声明的C语言函数

id objc_msgSend ( id self, SEL op, ... );

该函数主要参数self,表面了方法消息的接受者(一般是调用方法的类对象本身),参数SEL表面了要调用的那个方法。"..."是C语言中的不定参数,来向要调用的方法传递参数。

2、对象的方法调用传递。

要理解OC中的方法调用,重点要理解下面这张图,

0818b9ca8b590ca3270a3433284dd417.png

图中灰色的圆圈包含了isa指针与类对象的实例变量,这一部分是类对象的内存结构。

而isa作为指针又指向了另一部分,其实就是一个链表,isa指向了其第一个结点。

细看链表的每个结点,其包含了两部分

(1)指向父类的指针。

(2)自身的函数分发表。

当OC要调用方法时,会沿着这个链表一路查找,直到在函数分发表中找到要调用的函数为止。当然runtime会对这个过程进行优化,来缓存已经调用过得函数地址,不至于让我们每次都又沿着链表查找一遍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值