黑马程序员技术交流社区

标题: id类型的使用与NSObject区别 [打印本页]

作者: mazhichao    时间: 2015-7-4 22:06
标题: id类型的使用与NSObject区别
id是一种通用的对象类型,她可以用类存储属于任何类的对象,可以理解为万能指针
***在id的定义中,已经包装好了*号,id指针只能指向os的对象
NSObject 和id都可以指向任何对象
NSObject对象会惊醒编译时检查(需要强制类型转换)
id不需要强制类型转换,id可以直接使用
编译器看到id以后,认为是动态类型,不在检查类型
instancetype与id异同
相同点
        都可以作为方法的返回类型
不同点
        1)instancetype可以返回和方法所在类型相同的对象,id只能返回位置类型的对象
        2)instancetype只能作为返回值,不能像id那样作为参数
  1. 声明类
  2. #import <Foundation/Foundation.h>

  3. @interface Animal : NSObject
  4. -(void)run;
  5. @end
  6. 实现类
  7. #import "Animal.h"

  8. @implementation Animal
  9. -(void)run
  10. {
  11.     NSLog(@"Animal在跑");
  12. }
  13. @end
复制代码
  1. 继承Animal类,声明类
  2. #import "Animal.h"

  3. @interface Dog : Animal

  4. @end
  5. 实现类
  6. #import "Dog.h"

  7. @implementation Dog
  8. -(void)run
  9. {
  10.     NSLog(@"Dog在跑");
  11. }
  12. @end
复制代码

用实践证明id与NSObject的区别
  1. #import <Foundation/Foundation.h>
  2. #import"Dog.h"
  3. int main(int argc, const char * argv[]) {
  4.     @autoreleasepool {
  5.         // insert code here...
  6.         Animal *ani = [[Animal alloc]init];
  7.         [ani run];//Animal在跑
  8.         Animal *ani2 = [[Dog alloc]init];
  9.         [ani2 run];//Dog 在跑
  10.         
  11.         NSObject *ob = [[Animal alloc]init];
  12.         [(Animal*)ob run];//Animal在跑
  13.         
  14.         ob = [[Dog alloc]init];
  15.         [(Dog*)ob run]; //Dog在跑
  16.         
  17.         //注意id使用
  18.         //id类型的使用
  19.         id obj2;
  20.         obj2 = ani;
  21.         [obj2 run]; //Animal在跑
  22.     }
  23.     return 0;
  24. }
复制代码

作者: 649685603    时间: 2015-12-7 21:32
看看吧
作者: cbl16888    时间: 2015-12-7 21:41
挺好的哦.学习下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2