前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS runtime(基础篇)

iOS runtime(基础篇)

作者头像
大壮
发布2018-06-19 13:13:37
5140
发布2018-06-19 13:13:37
举报
文章被收录于专栏:大壮大壮

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

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

1.静态语言如下

代码语言:javascript
复制
    #include < stdio.h >  
       
    int main(int argc, const char **argv[])  
    {  
            printf("Hello World!");  
            return 0;  
    }   

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

2.动态语言Objective-C

代码语言:javascript
复制
[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系统。 这两个版本最大的区别在于当你更改一个类的实例变量的布局时,在早期版本中你需要重新编译它的子类,而现行版本就不需要。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.08.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.静态语言和动态语言的区别
  • 一.介绍下动态语言
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档