是什么?
是个指针,这个指针的类型是id类型!
有什么用?
可以表示任意的oc对象的指针!等同与NSObject *;
id obj = [Person new];//父类指针,指向子类对象!
怎么用?
id obj=[Person new];;
用的时候注意什么?
- Cat.m
- #import "Cat.h"
- @implementation Cat
- -(void) add:(id)ts{
- NSLog(@"id可以当参数传入进来!%@",ts);
- }
- @end
- Person.h
- #import <Foundation/Foundation.h>
- @interface Person : NSObject
- @property NSString *name;
- @property id mid;
- @end
- Person.m
- #import "Person.h"
- @implementation Person
- @end
- main.m
- /*
- id指针的用法
- 是一个指针.这个指针的类型是id类型.
- 作用:
- 可以表示任意的OC对象的指针--万能指针.等效于:NSObject *;
- id指针可以当做参数使用
- id指针可以当做属性使用
-
-
- 注意:
- 1.id不用加*.其里面已经封装好了.相当于id ==NSObject *
- 2.id访问指向对象的方法,不需要强转.
- 3.id访问指向对象的属性时候,需要强转!
-
- 好处:
- 扩展性很强.
- 1.id指针可以直接调用子类的方法
- 2.id指针可以当参数来用!
- 3.id指针可以当属性来用!
- 3.当一个对象的类型不确认时,或一个指针指向的对象类型有多种时,id可适用.
-
- */
- #import <Foundation/Foundation.h>
- #import "Person.h"
- #import "Cat.h"
- int main(int argc, const char * argv[]) {
- //多态,父类指针指向子类对象
- NSObject *obj = [Person new];
- //只能强转为子类
- ((Person *)obj).name = @"huh";
- NSLog(@"姓名:%@",((Person *)obj).name);
-
- //id可以直接调用子类的方法
- id iobj = [Person new];
- [iobj setName:@"DDD"];
- NSLog(@"姓名:%@",[iobj name]);
-
- //id可以当属性来用,
- //id 当属性用,可以是百变类型!
- //当一个类型不确定时,可以用id(也就是说,我不知道,要赋什么值过来的时候)
- Person *pr = [Person new];
- pr.mid = @"huh3";//赋值,NSString
- // pr.mid = [Car new];//赋值,对象
- pr.mid = pr; //赋值,实例化对象
- ((Person *)pr.mid).name = @"id属性";
- //id访问指向对象的属性时候,需要强转!
- NSLog(@"姓名:%@",((Person *)pr.mid).name);
-
-
- //id可以当参数
- Cat *ct = [Cat new];
- [ct add:@"huh,haha"];
- return 0;
- }
复制代码 |