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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mazhichao 中级黑马   /  2015-7-4 22:06  /  3708 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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. }
复制代码

2 个回复

倒序浏览
看看吧
回复 使用道具 举报
挺好的哦.学习下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马