id类型 和 应用场景
IOS5之后推出了instancetype类型
instancetype和id的访问
(1) 相同点
都可以作为方法的返回类型
(2) 不同点
1.instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象
2.instancetype只能作为返回值,不能像id那样作为参数
id是一个通用的类型
id就是动态绑定,运行时才知道类型
IOS5之后推出了instancetype类型
instancetype和id的访问
(1) 相同点
都可以作为方法的返回类型
(2) 不同点
1.instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象
2.instancetype只能作为返回值,不能像id那样作为参数
id是一个通用的类型
id就是动态绑定,运行时才知道类型
id应用场景
<span style="font-size:14px;"> @interface Animal : NSObject
-(void)run;
@end
@implementation Animal
-(void)run{
NSLog(@"动物在跑!");
}
@end
@interface Dog : Animal
-(void)run;
@end
@implementation Dog
-(void)run{
NSLog(@"狗在跑!");
}
@end
int main(){
Animal *animal = [Animal new];
[animal run];//动物在跑
Animal *animal2 = [Dog new];
[animal2 run];//狗在跑!
NSObject *obj = [Animal new];
[(Animal*)obj run];//动物在跑
obj = [Dog new];
[(Dog*)obj run];//狗在跑
//由于id是一个通用的类型,可以转换任何类型
//id就是动态绑定,运行时才检查类型
id dog = [Dog new];
[dog run];
return 0;
}
-(BOOL) isMemberOfClass: classObj
判断是否是这个类的实例,子类不算
格式:
BOOL bb = [dog isMemberOfClass : [Animal class]];//输出0
BOOL bb2 = [animal isMemberOfClass: [Animal class]];//输出1
判断是否是这个类的子类
格式:
BOOL bb3 = [Dog isSubclassOfClass : [Animal class]];//输出1
BOOL bb4 = [[dog class] isSubclassOfClass : [ani class]];//输出1
BOOL bb5 = [dog isKindOfClass: [Dog class]];//输出1
</span>