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 条评论
登录 后参与评论

相关文章

来自专栏青玉伏案

设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)

在此先容我拿“小弟”这个词来扯一下淡。什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”。在上面一篇博文我们完整的介绍了...

19810
来自专栏移动端开发

AVFoundation 框架初探究(三)

这篇总结什么? ----       在该系列的上一篇的文章中,我们总结的大致内容如下:       1、视频录制  AVCaptureSession + AV...

3093
来自专栏wOw的Android小站

[Objective-C] Block实现回调和简单的学习思考

关于Objective-C的回调,最常见的应该是用delegate代理实现。不过代理的实现比起Block要更基础,就不介绍了,下面总结一下Block回调的实现。

602
来自专栏ShaoYL

iOS 安全

3346
来自专栏CSDN技术头条

Go语言实践:从新手入门到上线真实的小型服务所遇到的那些坑

Teamwork团队在去年写了近20万行Go代码,建造了一堆速度奇快的小型HTTP服务,本文列出了他们总结的9条经验教训。 为什么选择Go语言?Go语言,又称G...

2067
来自专栏Java帮帮-微信公众号-技术文章全总结

第一天 Java基础入门【悟空教程】

2347
来自专栏斑斓

漂亮的with,鱼与熊掌可以兼得

假设要加载磁盘上的一个文件,并以二进制形式读取文件的数据。若要从健壮性的角度考虑,需得考虑两种异常情况: 加载文件失败,例如给定的文件路径并不存在该文件 读取文...

3658
来自专栏ShaoYL

iOS 安全

2004
来自专栏Golang语言社区

Go语言实践:从新手入门到上线真实的小型服务所遇到的那些坑

摘要: Teamwork团队在去年写了近20万行Go代码,建造了一堆速度奇快的小型HTTP服务,本文列出了他们总结的9条经验教训。 为什么选择Go语言?Go...

3366
来自专栏腾讯大讲堂的专栏

设计模式笔记

| 导语 “计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决” “Any problem in computer science can be so...

4458

扫码关注云+社区