OC基础-静态类型,动态类型,编译检查,运行检查,父子类指针和对象互指17

来源:互联网 发布:网络客服招聘 编辑:程序博客网 时间:2024/05/22 05:17

1. 弱语言和强语言的区别.


    编译器在编译的时候.语法检查的时候没有那么严格.

    不管你怎么写都是可以的.


    int num = 12.12;


    优点:灵活咋个行都写.

    缺点:太灵活


    强类型的语言:编译器在编译的时候做语法检查的时候行就是行不行就是不行.



2.静态类型和动态类型

    静态类型:

    指的是1个指针指向的对象是1个本类对象.

    动态类型:

    指的是1个指针指向的对象不是本类对象.




3. 编译检查和运行检查.

   编译检查

    编译器在编译的时候,能不能通过1个指针去调用指针指向的对象的方法.


    判断原则:看指针所属的类型之中是有这个方法,如果有就认为可以调用编译通过.

    如果这个类中没有那么编译报错.


    这个叫做编译检查.在编译的时候能不能调用对象的方法主要是看指针的类型.


    我们可以将指针的类型做转换,来达到骗过编译器的目的.




   运行检查.


    编译检查只是骗过了编译器.但是这个方法究竟能不能执行.


    所以在运行的时候.运行时会去检查对象中是否真的有这个方法.如果有就执行如果没有就报错误.

   

    代码里可以在执行的时候检查一下 

   

      1).判断对象中是否有这个方法可以执行.

 

         - (BOOL)respondsToSelector:(SEL)aSelector;


      2).判断类中是否有指定的类方法.

 

         + (BOOL)instancesRespondToSelector:(SEL)aSelector;


     3).判断指定的对象是否为 指定类的对象或者子类对象.


        - (BOOL)isKindOfClass:(Class)aClass;


     4).判断对象是否为指定类的对象不包括子类.

 

         - (BOOL)isMemberOfClass:(Class)aClass;


     5).判断类是否为另外1个类的子类.


        + (BOOL)isSubclassOfClass:(Class)aClass;



4 父子类指针和对像互指

    父类指针指向子类对象.

    实际上任意的指针可以执行任意的对象.编译器是不会报错的.父指针指向子类对象,因为子类继承了父类的所有属性,使用的时候,只能获得父类中有的方法和属性,而子类中拥有父类中的        所有方法和属性,在运行的时候,也不会报错。


    1个子类指针指向1个父类对象的时候,如果调用了子类中的特有方法,编译器运行通过子类指针去调用子类独有的方法.编译不会出错

    但是在运行的时候是会出问题的.因为父类对象中根本没有子类成员.

原创粉丝点击