Objective-C之新特性(2)

一概述:

        前面几篇,有讲过一个类型是在运行时才确定下来的,接下来仔细讲讲Objective-C这门语言~



二.为什么说Objective-C是一门动态的语言?

        1.什么是动态语言:

                   动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等结构上的变化。例如JavaScript、Ruby、Python便是一个动态语言。而C、C++、Java等语言则不属于动态语言.

                有三个名词容易混淆:
                Dynamic Programming Language (动态语言或动态编程语言)
                Dynamically Typed Language (动态类型语言)

                Statically Typed Language (静态类型语言)


                所谓的动态类型语言,意思就是类型的检查是在运行时做的


          2.什么是静态类型语言?

                     静态类型语言的类型判断是在运行前判断(如编译阶段),比如C#、Java就是静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段,如继承、接口

           3.它们之间的优缺点?

                 静态类型语言的主要优点:在于其结构非常规范,便于调试,方便类型安全;
                                          缺点:是为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了。

               动态类型语言的优点:在于方便阅读,不需要写非常多的类型相关的代码;
                                     缺点:自然就是不方便调试,命名不规范时会造成读不懂,不利于理解等。


三.Objective-C的动态运行性

        Objective-C语言是C语言的一个子类,所以Objective-C是一个静态语言,但是Objective-C的三大特性之一的多态性让其拥有了动态性。


            OC的动态性:让程序可以在运行时判断其该有的行为,而不是像C等等静态语言一样在编译构建时就确定下来。


    它的动态性主要体现在一下三个方面:

        1.动态类型(代表:id类型):实际上静态类型因为其固定性和可预知性而使用得更加广泛。静态类型是强类型,而动态类型(OC)属于弱类型,运行时决定接收者


         补充: 弱类型的检查很弱,仅能区分指令和数据;强类型的严格在编译期进行检查。强类型语言在没有强制类型转化前,不允许两种不同类型的变量相互操作


       2.动态绑定:方法确定的动态性,具体指的是利用OC的消息传递机制将要执行的方法的确定推迟到运行时,可以动态添加方法。

           也就是说,一个OC对象是否调用某个方法不是由编译器决定的,而是由运行时决定的; 

            另外关于动态绑定的关键一点是基于消息传递机制的消息转发机制,主要处理应对一些接受者无法处理的消息,此时有机会将消息转发给其他接收者处理

                动态绑定是基于动态类型的,在运行时对象的类型确定后,那么对象的属性和方法也就确定了(包括类中原来的属性和方法以及运行时动态新加入的属性和方法),这也就是所谓的动态绑定了。动态绑定的核心就该是在运行时动态的为类添加属性和方法,以及方法的最后处理或转发      


        3.动态加载:个是动态资源加载,一个是一些可执行代码模块的加载,这些资源在运行时根据需要动态的选择性的加入到程序中,是一种代码和资源的‘懒加载’模式,可以降低内存需求,提高整个程序的性能,另外也大大提高了可扩展性。


        对象是运行时类的一个实例。在类里声明了的实例变量和方法,它的每个实例都在内存中拥有同样的实例变量,以及指向那些方法的指针。在oc中对象永远是通过指针来引用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值