美文网首页程序员
iOS runtime(基础篇)

iOS runtime(基础篇)

作者: userName | 来源:发表于2017-08-17 07:58 被阅读45次

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

    相关文章

      网友评论

        本文标题:iOS runtime(基础篇)

        本文链接:https://www.haomeiwen.com/subject/znqgrxtx.html