iOS runtime(基础篇)

Objective-C作为一门动态编译语言,会将编译和连接时要做的事情推迟到运行时。这代表着OC语言不仅仅需要一个编译环境,同时也需要一个运行时系统来执行编译好的代码。 也可以这样理解:“运行时系统(runtime)扮演的角色类似Objective-C语言的操作系统,Objective-C基于该系统来工作”。

一.静态语言和动态语言的区别

1.静态语言如下

    #include < stdio.h >  
       
    int main(int argc, const char **argv[])  
    {  
            printf("Hello World!");  
            return 0;  
    }   

静态语言执行过程:经过编译器的语言分析,优化然后将你最佳化的代码编译成汇编语言,然后完全按照你的设计逻辑和代码自上而下的执行。

2.动态语言Objective-C

[receiver message] 
objc_msgSend(receiver, selector) 
objc_msgSend(receiver, selector, arg1, arg2, …)  

Objective-C语言执行过程:消息只有到运行时才会和函数实现绑定起来,而不是按照编译好的逻辑一成不变的执行。

一.介绍下动态语言

1.runtime确实是开源的。 目前苹果公司和GNU各自维护一个开源的runtime版本,这两个版本之间都在努力的保持一致。 下载地址

2、runtime是由C语言实现的 runtime做为Objective-C最核心的部分,几乎全部由C语言实现。这里的“几乎”所指的例外就包含有的方法(比如下面要说道的objc_msgSend方法)是用汇编实现的。

3.runtime的两个版本 runtime其实有两个版本:"Modern(现行)"和"legacy(早期)"。 Objective-C 2.0 之后采用的是Modern版的 runtime系统,只能运行在 iOS 和 OS X 10.5 之后的64位程序中。 而OS X较老的32位程序仍采用 Objective-C 1中得(早期) Legacy 版本的 runtime系统。 这两个版本最大的区别在于当你更改一个类的实例变量的布局时,在早期版本中你需要重新编译它的子类,而现行版本就不需要。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据之美

玩转 SHELL 脚本之:Shell 命令 Buffer 知多少?

1、问题: 下午有同学问了这么一个问题: tail -n +$(tail -n1 /root/tmp/n) -F /root/tmp/ip.txt 2>...

1906
来自专栏ThoughtWorks

高效快速地加载 AngularJS 视图|TW洞见

今日洞见 文章作者、部分图片来自ThoughtWorks:陈计节。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体...

2937
来自专栏梦里茶室

【Chromium中文文档】跨平台开发的约定与模式

Chromium是一个巨大而复杂的跨平台产品。我们试图在不同平台间共享尽可能多的代码,同时为每个平台用最合适的方式实现UI和操作系统集成。这提供了一个更好的用户...

2079
来自专栏SDNLAB

基于Ryu打造自定义控制器

控制器是SDN网络中最重要的组成部分。在开发SDN应用时,需要基于某一个控制器开发,而大部分开源控制器都是一个框架或者平台,更多个性化的设置和应用需要开发者自己...

3676
来自专栏北京马哥教育

一篇了解爬虫技术方方面面

传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬...

703
来自专栏北京马哥教育

一篇了解爬虫技术方方面面

原理 传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件...

3969
来自专栏文大师的新世界

3. react-redux

react-redux是reactjs官方推荐的state管理器。具体的定义我就不说了,因为有很多地方比我说的好,大家可以Google或参照:redux、中文文...

1362
来自专栏逍遥剑客的游戏开发

UE4学习笔记(四): 开发体验

2346
来自专栏西安-晁州

protobuf简单测试应用

protobuf是google推出的一种数据交换协议,比较适合应用于底层服务交互,nodejs提供protobufjs包的实现,下面是一个简单的测试demo: ...

2470
来自专栏西安-晁州

protobuf简单测试应用

protobuf是google推出的一种数据交换协议,比较适合应用于底层服务交互,nodejs提供protobufjs包的实现,下面是一个简单的测试demo: ...

2240

扫码关注云+社区