文档章节

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

卧龙小
 卧龙小
发布于 2015/06/23 16:51
字数 578
阅读 43
收藏 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 使用动态绑定的消息结构,在运行时才会检查对象类型,接受消息后,应该执行什么代码,有运行期环境而非编译器来决定


© 著作权归作者所有

共有 人打赏支持
卧龙小
粉丝 42
博文 146
码字总数 70107
作品 0
西城
程序员
iOS天气动画、高仿QQ菜单、放京东APP、高仿微信、推送消息等源码

iOS精选源码 TYCyclePagerView iOS上的一个无限循环轮播图组件(http://www.code4app.com/thread-14507-1-1.html) iOS高仿微信完整项目源码(http://www.code4app.com/thread-14695-1-1.html)......

sunnyaigd
06/12
0
0
iOS使用Objective-c自定义cordova插件(-)

本系列教程为博主初次使用开发,内容如有差错,欢迎指正,敬请谅解。 博客地址:http://blog.img421.com/iosshi-yong-object-czi-ding-yi-cordovacha-jian/ Mac安装ionic和cordova我们已经熟悉,...

Michaelyn
2017/10/23
0
0
OC中的消息传递-performselector的使用

1、OC中使用Selector来实现函数传递,大致有下面几个原因: (1)iOS中强调消息传递,而非函数调用; (2)iOS SDK中的大部分API都是selector的方式。 (3)你可以在任意时刻对一个对象传递消...

琪与千寻
2013/12/25
0
0
iOS使用Objective-c自定义cordova插件(二)

接上一章. 中还有其它的配置、、、以及配置文件. eg: 框架: <framework src="CFNetwork.frame" weak="true"/> plist文件: <resource-file src="src/ios/PushConfig.plist"/> 默认的info.plis......

Michaelyn
2017/10/23
0
0
如何判断你是合格的高级iOS开发工程师?

前言 随着移动互联网的高速发展泄洪而来,有意学习移动开发的人越来越多了,竞争也是越来越大,需要学习的东西很多。如何才能在激烈的移动开发者竞争中一枝独秀,成为一名真正合格的高级iOS...

_小迷糊
05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea新建springCloud项目(5)- 订单服务

1.创建订单api,如下: 2.创建订单实现逻辑 3.新建订单、订单商品表 -- 订单 create table `order_master` ( `order_id` varchar(32) not null, `buyer_name` varchar(32) not null comment......

monroeCode
23分钟前
1
1
游戏开发经验谈(二):对战类全球服游戏的设计与实现

上篇文章《游戏开发经验谈(一):游戏架构里隐藏的五个坑及其应对方案》,我们主要讲解了游戏架构设计当中隐藏的一些坑及其应对方案,错过的小伙伴可以回溯之前的内容。本期内容,将会重点介...

UCloudTech
32分钟前
0
0
Mysql基本语法

一.联合主键 drop table CONTENT_AND_CATALOG;CREATE TABLE `tobebetter`.`CONTENT_AND_CATALOG` ( `ID` VARCHAR(120) NOT NULL , `CONTENT_ID` VARCHAR(120) , `CA......

我是菜鸟我骄傲
34分钟前
0
0
179. centos7 安装mariadb

1. centos7 中安装mariadb 1.1 执行安装 centos7 自带了mariadb yum -y install mariadb mariadb-server 1.2 启动mariadb systemctl start mariadb 1.3 设置开机启动 systemctl enable maria......

Lucky_Me
41分钟前
0
0
【AI实战】动手训练自己的目标检测模型(YOLO篇)

在前面的文章中,已经介绍了基于SSD使用自己的数据训练目标检测模型(见文章:手把手教你训练自己的目标检测模型),本文将基于另一个目标检测模型YOLO,介绍如何使用自己的数据进行训练。 ...

雪饼
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部