OC基础-静态类型,动态类型,编译检查,运行检查,父子类指针和对象互指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个父类对象的时候,如果调用了子类中的特有方法,编译器运行通过子类指针去调用子类独有的方法.编译不会出错

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值