id数据类型是一种通用的对象类型,它可以用来存储属于任何类的对象。也可以理解为万能指针。
存储在id变量中的对象类型在编译时无法确定,因此一些测试只能在程序执行时进行。
注意:id变量不能使用点运算符,如果尝试这样做,编译器会马上报错。
NSObject类和id类型: NSObject类和id类型都可以指向任何对象。
但NSObject会进行编译时检查(需要强制类型转换);
而id不需要强制类型转换,id可以直接使用,编译器在看到id以后,认为是动态类型,不再进行检查。
instancetype(在iOS5之后推出的)类型和id的异同点:
(1)相同点:
都可以作为方法的返回类型
(2)不同点:
instancetype可以返回和方法所在的类相同的对象,而id只能返回未知类型的对象
instancetype只能作为返回值,而id还可以作为参数。
id的应用(已有一个Animal和Dog的类,Dog类是继承自Animal类的,且Animal类中有run方法,Dog类中覆盖了run方法):
//创建一个动物的对象
Animal *ani = [[Animal alloc] init];
//创建一个狗的对象
Dog *dog = [[Dog alloc] init];
id obj;
obj = ani;
[obj run];//动物跑
obj = dog;
[obj run];//狗跑
|
|