文档章节

IOS OC的消息结构 和 运行期组件

卧龙小
 卧龙小
发布于 2015/06/23 16:51
字数 578
阅读 134
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

一消息结构 和 函数调用的区别

    Objective -C 是由Smalltal(70年代的语言)演化而来。Smalltal是最早的消息语言,消息结构和函数调用之间的区别如下:


1.1消息结构 (Objective-c)
NSObject *obj = [[NSObject alloc]init];
[obj performWith:参数1 and:参数2];


1.2 函数调用 (C++)
Object *obj = new Object;
obj->perform(parameter1,parameter2);


    两者主要的区别在于:消息结构的语言,运行时所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。


    如果代码中调用的函数是多态的,函数调用的语言,会在运行时就要按照"虚方法表(virtual table)"来查出应该执行那个函数实现。而消息结构的语言,不论是否多态,总是在运行时才会去查找索要执行的方法。编译器甚至不关心接受消息的对象是何种类型。接受消息的对象也要在运行时处理,这个过程也叫"动态绑定"


二运行期组件(runtime component)

    Objective-c 的重要工作都是由运行期组件(runtime component)而非编译器来完成,使用Objective-C的面向对象特性所需的全部数据结构和函数都在运行期组件里面。


    例如:运行期组件中含有全部内存管理方法。运行期组件的本质上就是一种与开发者所编代码相链接的"动态库"(dynamic library),其代码能把开发者所编的所有程序粘合起来。这样的话,只需要更新运行期组件,就可以提升应用程序性能。而那种许多工作都在"编译器"完成的语言,想要获得类似的性能提升,则需要重新编译运用程序代码。


三总结

    Objective-c 使用动态绑定的消息结构,在运行时才会检查对象类型,接受消息后,应该执行什么代码,有运行期环境而非编译器来决定


卧龙小
粉丝 41
博文 146
码字总数 70107
作品 0
西城
程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
7.6K
8
在多个浏览器上运行脚本--Queen

假设你想和朋友们玩这么个游戏:你写下某个数字,然后让朋友们猜你写的是什么数字。你的朋友们将不断的给你一些猜测的数字,直到猜中为止。 现在想象你的朋友都是使用的浏览器,这个游戏就相...

匿名
2013/01/24
4.7K
1
Web开发组件管理器--Bower

Bower 是一个针对Web开发的包管理器。该工具主要用来帮助用户轻松安装CSS、JavaScript、图像等相关包,并管理这些包之间的依赖。 功能有些类似于Component。不同之处是,Component是围绕Git...

匿名
2013/02/01
1.2W
2
Ruby虚拟机--YARV

YARV(Yet Another Ruby VM),该项目的唯一目的就是要打造世界上最快的Ruby虚拟机。从早期的一些评测来看,YARV为Ruby带来了巨大的性能提升,而它也成为了后来Ruby 1.9的官方解释器,自然不...

匿名
2013/02/17
1.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

02-敏捷的核心价值观

敏捷金字塔 敏捷所包含的知识领域可以概括为一个金字塔结构,金字塔的最底层,也就是一切的根基是敏捷的核心价值观,也就是著名的《敏捷宣言》,中间支撑的部分是敏捷的12项原则,而最顶层则...

杨久成
06/18
0
0
你还不知道 OpenGL ES 和 EGL 的关系?

什么是 EGL EGL 是 OpenGL ES 和本地窗口系统(Native Window System)之间的通信接口,它的主要作用: 与设备的原生窗口系统通信; 查询绘图表面的可用类型和配置; 创建绘图表面; 在OpenG...

ByteFlow
今天
0
0
Asp.net Core 微信小程序支付

最近要做一个微信小程序支付的功能 在网上找了一下 .net Core做微信支付的博客 和 demo 几乎没有 自己研究了好几天 参考了 很多 大牛的博客 勉强做出来了 因为参数都没有 比如 opid 小程序域...

osc_ix000whh
1分钟前
0
0
腾讯云 Serverless 衔接 Kafka 上下游数据流转实战

导语:腾讯云 CKafka 作为大数据架构中的关键组件,起到了数据聚合,流量削峰,消息管道的作用。在 CKafka 上下游中的数据流转中有各种优秀的开源解决方案。如 Logstash,File Beats,Spark...

腾讯云中间件
昨天
0
0
「真香警告」鱼头手摸手教你在小程序里用composition-api

使用 使用起来应该像是这个样子 wxue(options) setup 配置应该是包含一个setup选项是一个函数,返回的函数可以this.xxx调用,返回的数据可以this.data.xxx用到,如下 import { wxue, rea...

陈大鱼头
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部