黑马程序员技术交流社区

标题: id指针_总结 [打印本页]

作者: huh    时间: 2015-12-8 23:04
标题: id指针_总结
是什么?
    是个指针,这个指针的类型是id类型!
有什么用?
    可以表示任意的oc对象的指针!等同与NSObject *;
    id obj = [Person new];//父类指针,指向子类对象!
怎么用?
    id obj=[Person new];;
用的时候注意什么?
  1. Cat.m
  2. #import "Cat.h"
  3. @implementation Cat
  4. -(void) add:(id)ts{
  5.     NSLog(@"id可以当参数传入进来!%@",ts);
  6. }
  7. @end
  8. Person.h
  9. #import <Foundation/Foundation.h>
  10. @interface Person : NSObject
  11. @property NSString *name;
  12. @property id mid;
  13. @end
  14. Person.m
  15. #import "Person.h"
  16. @implementation Person
  17. @end
  18. main.m
  19. /*
  20. id指针的用法
  21. 是一个指针.这个指针的类型是id类型.
  22. 作用:
  23. 可以表示任意的OC对象的指针--万能指针.等效于:NSObject *;
  24. id指针可以当做参数使用
  25. id指针可以当做属性使用


  26. 注意:
  27. 1.id不用加*.其里面已经封装好了.相当于id ==NSObject *
  28. 2.id访问指向对象的方法,不需要强转.
  29. 3.id访问指向对象的属性时候,需要强转!

  30. 好处:
  31. 扩展性很强.
  32. 1.id指针可以直接调用子类的方法
  33. 2.id指针可以当参数来用!
  34. 3.id指针可以当属性来用!
  35. 3.当一个对象的类型不确认时,或一个指针指向的对象类型有多种时,id可适用.

  36. */
  37. #import <Foundation/Foundation.h>
  38. #import "Person.h"
  39. #import "Cat.h"
  40. int main(int argc, const char * argv[]) {
  41.     //多态,父类指针指向子类对象
  42.     NSObject *obj = [Person new];
  43.     //只能强转为子类
  44.     ((Person *)obj).name = @"huh";
  45.     NSLog(@"姓名:%@",((Person *)obj).name);
  46.    
  47.     //id可以直接调用子类的方法
  48.     id iobj = [Person new];
  49.     [iobj setName:@"DDD"];
  50.     NSLog(@"姓名:%@",[iobj name]);
  51.    
  52.     //id可以当属性来用,
  53.     //id 当属性用,可以是百变类型!
  54.     //当一个类型不确定时,可以用id(也就是说,我不知道,要赋什么值过来的时候)
  55.     Person *pr = [Person new];
  56.     pr.mid = @"huh3";//赋值,NSString
  57. //    pr.mid = [Car new];//赋值,对象
  58.     pr.mid = pr; //赋值,实例化对象
  59.     ((Person *)pr.mid).name = @"id属性";
  60.     //id访问指向对象的属性时候,需要强转!
  61.     NSLog(@"姓名:%@",((Person *)pr.mid).name);
  62.    
  63.    
  64.     //id可以当参数
  65.     Cat *ct = [Cat new];
  66.     [ct add:@"huh,haha"];
  67.     return 0;
  68. }
复制代码

作者: 核酸的双链    时间: 2015-12-9 00:32
赞赞赞赞赞




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