Car *car =[[Car alloc] init];// 动态
id cars;// 编译时无法确定cars的类型
cars = car;// 运行时确定cars的类型
动态绑定
程序在执行时才确定对象调用的实际方法。
常用方法
(BOOL) isKindOfClass
Car *car =[[Car alloc] init];
Car *bmw =[[Bmw alloc] init];// 判断宝马是不是Car的类或者成员
BOOL flag =[bmw isKindOfClass:[Car class]];if(flag){// 是的NSLog(@"bwm is car");}
(BOOL) isMemberOfClass
// 判断是不是这个类
flag =[bmw isMemberOfClass:[Car class]];if(!flag){NSLog(@"bmw 不是 car 这个类");}
(BOOL) respondsToSelector
// 判断car是否能响应run这个方法
flag =[car respondsToSelector:@selector(run)];if(flag){NSLog(@"car 能响应 run 方法");}
performSelector
// select的调用方式
SEL action;
action =@selector(run);[car performSelector:action];// 等同于[car performSelector:@selector(run)];
(BOOL) isSubclassOfClass
// 是否是其子类
flag =[Bmw isSubclassOfClass:[Car class]];if(flag){NSLog(@"Bmw 是 car的子类");}
(BOOL) [ClassName class] == [ClassName class]
// 判断两个类是否是同一类型
flag =[Bmw class]==[Car class];if(!flag){NSLog(@"不是同一类型");}
OC中的异常处理
// OC中的异常处理@try{
car = nil;[car run];}@catch(NSException *e){NSLog(@"catch exception:%@,%@",e.name,e.reason);}@finally{NSLog(@"finally");}