zoukankan      html  css  js  c++  java
  • OC 动态类型,动态绑定,动态加载

    OC 动态类型,动态绑定,动态加载

    Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有

    • 动态类型(Dynamic typing)
    • 动态绑定(Dynamic binding)
    • 动态加载(Dynamic loading)

    动态类型:程序直到执行时才能确定所属的类。

    id 数据类型
    id 通用的对象类型,可以存储任意类型的对象,id后面没有*号,它本身就是个指针
    类似于void * ,但只可以指向对象类型

    静态类型与动态类型

    1. 编译期检查与运行时检查
    2. 静态类型在编译期就能检查出错误
    3. 静态类型声明代码可读性好
    4. 动态类型只有在运行时才能发现错误

    动态绑定:程序直到执行时才能确定实际要调用的方法。

    动态绑定所做的,即是在实例所属类确定后,将某些属性和相应的方法绑定到实例上。

    BOOL类型

    bool是C语言的布尔类型,有true和false,BOOL是Objective C 语言的布尔类型,有YES和NO,因为OC可以跟C混编,所以bool和BOOL可以同时出现在代码中

    BOOL深入解析:
    typedef signed char BOOL;
    BOOL类型有两个值YES,NO。YES=1,NO=0。

    说明:objective-c 中的BOOL实际上是一种对带符号的字符类型(signed char)的类型定义(typedef),它使用8位的存储空间。通过#define指令把YES定义为1,NO定义为0。

        Class类:表示一个类名,class被创建后,我们可以把class来当成对象的类。
     
        Class cla1 = [类名 class]
        Class cla2 = [对象 class]
        Class cla3 = NSClassFromString(@"类名");
    
        SEL 类成员方法的指针
    
        可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取.
        它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)
     
         1>类里面的方法都是被转换成SEL变量进行存储的。
         2>放类声明一个对象,对象调用方法的时候,系统会被这个方法转换成SEL,然后拿这个SEL到类方法中去匹配。
         3>我们可以自己手动把方法转换成SEL,然后用这个SEL去查找方法(performSelector)。
    
        -isMemberOfClass:
        判断是否是这个类的实例
        -isKindOfClass:
        判断是否是这个类或者这个类的子类的实例
        -respondsToSelector:
        判读实例是否有这样方法
        +instancesRespondToSelector:
        判断类是否有这个方法。此方法是类方法。
    

    动态加载:根据需求加载所需要的资源

    这点很容易理解,对于iOS开发来说,基本就是根据不同的机型做适配。最经典的例子就是在Retina设备上加载@2x的图片,而在老一些的普通屏设备上加载原图。随着Retina iPad的推出,和之后可能的Retina Mac的出现,这个特性相信会被越来越多地使用。

    赠品

    多态的出现时为了让不同的类能使用同名的方法。这个让程序的可读性大大提高,也降低了编程难度。

    动态类型与动态绑定是为了解决随多态的便利而引起的弊端,有了动态类型与动态绑定,不用去考虑输出中的方法是哪个类型的方法,会自动判定。

    而id类型的出现就是为了更好的承接动态类型与动态方法出来的返回值。

  • 相关阅读:
    php面向对象 小题记
    php设计模式 Composite (组合模式)
    php设计模式 FlyWeight (享元模式)
    优化 PHP 代码的 40 条建议
    小试QueryPath,一个实现了不少jQuery接口的PHP类库
    PHP处理提交的JSON数据
    web test automation test / QTP / IBM RFT / Selenium IDE / IOS appium / AU3
    web test LoadRunner error list / error log
    web test LoadRunner tomcat / websphere
    OS + Linux/Unix download tools curl / wget
  • 原文地址:https://www.cnblogs.com/xubaoaichiyu/p/5483288.html
Copyright © 2011-2022 走看看