首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

iOS runtime(基础篇)

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