A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liruixue 中级黑马   /  2015-11-23 16:01  /  1779 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

Id类型及应用场景和动态类型的检测

一、NSObject是所有类的基类,可以指向任何对象
   NSObject和id都可以指向任何对象
   NSObject对象会对进行编译检查(需要强制类型转换)
   Id不需要强制类型转换,id可以直接用
   编译器看到id以后,认为是动态类型,不在检查类型
   Id使用
   Id obj;
   Obj=ani;//ani是子类的实例对象
   [obj run];
   Instancetype 和id的异同:
1) 相同点
  都可以作为方法的返回类型
2)不同点
   Instancetype 可以返回和方法所在类型相同类型的对象,id只能返回未知数据类型的对象;
  Instancetype只能作为返回值,不能像id那样作为参数
二、动态类型的检测
   1.判断类型检测
1)判断某个对象是否是类的实例对象,或者子类的实例对象
  isKindOfClass 使用格式:[对象  isKindOfClass  类对象]
  BOOl  isInstance=[ d  isKindOfClass:[Animal Class] ];
2)isMemberOfClass 判断对象是否是指定类的实例对象
     使用格式:[对象  isMemberOfClass:类对象]
isInstance=[dog isMemberOfClass:[Animal class]];//只能判断当前类或者当前类的子类而子类的子类返回结果为假
3)判断类是否是指定类的子类(类和类之间的关系)
      BOOL  isSub=[Dog isSubclassOfClass:[Animal class]];  //Dog 类继承自Animal
      通过对象来获取类对象
      IsSub=[[dog class]isSubclassOfClass:[ani  class]];
格式:
[类 A isSubclassOfClass:类B]
判断类A是否是类B的子类  是yes  不是no

3 个回复

倒序浏览
还没学,来观摩一下
回复 使用道具 举报
可以的,巩固下这两天知识.
回复 使用道具 举报
对我很有用,谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马