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

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

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

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

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

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

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

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

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

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

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

(1)指向父类的指针。

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

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

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

  1. php调用另一个php文件里的变量的值,thinkphp中一个方法调用另一个步骤的变量

    thinkphp中一个方法调用另一个方法的变量 //实例化上传类 public function upload() { $upload = new Upload(); $upload->maxS ...

  2. android 模拟器识别,一种基于符号的识别Android应用运行在模拟器中的方法与流程...

    本发明涉及一种基于符号的识别android应用运行在模拟器中的方法. 背景技术: 很多的移动应用都会使用一种基于lbs的地理围栏的技术(如移动打卡),某些用户为了突破这种围栏的限制,将移动应用运行在模 ...

  3. @transactional注解_为啥同一个类中普通方法调用Spring注解方法,注解会失效?看完你就明白,So easy!...

    Spring注解(如@Transactional.@Cacheable.@Async等),在使用不当时,很可能会失效.失效的情况有很多种,本文我们就来瞅瞅,为啥同一个类中普通方法调用Spring注解方 ...

  4. 使用JavaSymbolSolver解决Java代码中的方法调用

    为什么创建java-symbol-solver? 几年前,我开始使用JavaParser ,然后开始做出贡献. 不久之后,我意识到我们想对Java代码执行的许多操作不能仅通过使用解析器生成的抽象语法树 ...

  5. Java程序设计语言基础03:Java中的程序执行流程

    目录 1. 简记部分 1.1 条件与循环 1.2 switch语句 1.3 continue与break 2. 变量的作用域 3. 从标准输入读取数据 4. 生成随机数 1. 简记部分 1.1 条件与 ...

  6. JAVA中native方法调用C语言实现学习

    在java虚拟机规范的内存管理划分中,对于虚拟机内存空间划分中专门划了一块内存叫做"本地方法栈(Native Method Stack)".本地方法栈是为了java专门用来调用na ...

  7. 基础强化:深入理解JVM中的方法调用

    作者:xiaolyuh my.oschina.net/xiaolyuh/blog/3168216 方法调用并不等同于方法中的代码被执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法 ...

  8. OOP 中的 方法调用、接口、鸭式辩型、访问者模式

    2019独角兽企业重金招聘Python工程师标准>>> 方法调用的四种方式 直接调用:通过类或者实例直接调用其方法. 接口调用或者转型调用:通过将实例回调给一个接口对象,或者转型为一 ...

  9. 梳理:python—同一个类中的方法调用

    为什么突然在此提到这个梳理问题呢? 因为在自己实践综合练习学过的知识时,突然觉得有些知识点的运用总是不成功,于是翻过课本进行回顾,总是觉得是对的,可是当再进一步思考"既然是对的,为什么在程序 ...

最新文章

  1. 【Python培训基础知识】Python生成器函数
  2. redis php web管理,redis web管理工具phpRedisAdmin安装
  3. Ajax Toolkit Control ——CollapsiblePanelExtender(隐藏显示效果)
  4. python推荐哪个系统好_什么是好的推荐系统?
  5. vue + element 顶部二级菜单_揭秘vue/react组件库中5个quot;作者不造的轮子quot;
  6. 第一部分:TCL基本知识
  7. PKU 2528 POJ 2528 Mayor's posters ( 线段树+离散化 ) ACM 2528 IN PKU
  8. Xgboost中特征重要性计算方法详解
  9. 4月第三周网络安全报告:发现放马站点域名437个
  10. deepin win10字体_从Win10复制黑体、宋体、仿宋等字体并装到Deepin的正确方法
  11. 安信可IDE使用教程 加入阿里云平台
  12. 帆软(FineReport)主子报表(报表联动)
  13. 【无标题】通信系统的有效性和可靠性
  14. 基于JAVA响应式交友网站计算机毕业设计源码+数据库+lw文档+系统+部署
  15. 【web实战-业务逻辑】评论点赞逻辑
  16. 信源编码算法(费诺编码哈夫曼编码)
  17. labview—word报表使用
  18. 安卓贴图源码---记录旋转后位置..类似in/百度魔图
  19. 微信公众号如何变得更好_过去十年,或者说如何在任何事情上变得更好
  20. 无线技巧:学会设置无线上网猫以及网卡

热门文章

  1. css 网格布局_CSS网格布局
  2. JavaScript Try Catch:异常处理说明
  3. oracle伪列ROWNUMBER,oracle 中 rownum 和 row_number()
  4. 关于静摩擦与动摩擦的loop_up_table设置
  5. Python错误,pip安装包或更新时因超时而报错误
  6. 迭代列表不要For循环,这是Python列表推导式最基本的概念
  7. 原版英文书籍《Linux命令行》阅读记录3 | 解析文件的描述含义和阅读文件
  8. 浅谈LINQ to SQL集成数据库语言优劣
  9. leetcode4:Median of Two Sorted Arrays
  10. 有关迷宫的c语言程序的编写,3种C语言编写走迷宫的方法