Object-C 学习笔记(十一)---动态绑定&异常处理
2013-12-11 15:01
399 查看
OC时一门面相对象的语言,前面提及到多态是一种动态绑定的技术之一,什么是动态绑定呢?
动态绑定:在编译的时候未确定是什么类型或程序根据正常的语法编译,在运行时根据多态来确定哪一种数据类型或者是调用哪个方法.
例子:
main.m
红色那段是异常处理的代码,bmw没有jiayou的方法,但是却调用了,于是出现异常,如果不被捕捉,则程序崩溃.(异常处理在java学习笔记有详细解析.)
动态绑定:在编译的时候未确定是什么类型或程序根据正常的语法编译,在运行时根据多态来确定哪一种数据类型或者是调用哪个方法.
例子:
// // Car.h//父类 // 动态绑定 // // Created by 5016 on 13-12-11. // Copyright (c) 2013年 dradon. All rights reserved. // #import <Foundation/Foundation.h> #import "Bmw.h" @interface Car : NSObject { @public Bmw *bw; } -(void)run:(NSInteger) speed; -(void)color; @end
// // Car.m // 动态绑定 // // Created by 5016 on 13-12-11. // Copyright (c) 2013年 dradon. All rights reserved. // #import "Car.h" @implementation Car -(void)run:(NSInteger) speed { } -(void)color { } @end
// // Audi.h // 动态绑定 // // Created by 5016 on 13-12-11. // Copyright (c) 2013年 dradon. All rights reserved. // #import "Car.h" @interface Audi : Car @end
// // Audi.m // 动态绑定 // // Created by 5016 on 13-12-11. // Copyright (c) 2013年 dradon. All rights reserved. // #import "Audi.h" @implementation Audi -(void)run:(NSInteger)speed { NSLog(@"奥迪车以%ld的速度在路上跑...",speed); } -(void)color { NSLog(@"这量奥迪车是黄色的"); } @end
// // Bmw.h // 动态绑定 // // Created by 5016 on 13-12-11. // Copyright (c) 2013年 dradon. All rights reserved. // #import <Foundation/Foundation.h> @interface Bmw : NSObject { @private NSString *name; } -(void)run:(NSInteger)speed; -(void)color; @end
// // Bmw.m // 动态绑定 // // Created by 5016 on 13-12-11. // Copyright (c) 2013年 dradon. All rights reserved. // #import "Bmw.h" @implementation Bmw -(void)run:(NSInteger)speed { NSLog(@"宝马车以%ld的速度在路上跑...",speed); } -(void)color { NSLog(@"这量宝马车是黄色的"); } @end
main.m
// // main.m // 动态绑定 // // Created by 5016 on 13-12-11. // Copyright (c) 2013年 dradon. All rights reserved. // #import <Foundation/Foundation.h> #import "Car.h" #import "Audi.h" #import "Bmw.h" int main(int argc, const char * argv[]) { @autoreleasepool { Bmw *bmw = [[Bmw alloc] init]; Audi *audi = [[Audi alloc] init]; Car *car =[[Car alloc] init]; //判断是否是子类 if ([audi isKindOfClass:[Car class]]) { NSLog(@"audi 是 Car的一种"); } //判断是否是类成员 if([audi isMemberOfClass:[Car class]]){ NSLog(@"audi 是 Car的一个成员"); } if([car isMemberOfClass:[Car class]]){ NSLog(@"car 是 Car的一个成员"); } //判断是否能响应方法 //写法1 if([bmw respondsToSelector:@selector(color)]){ NSLog(@"bmw 能响应color这个方法"); } //写法2 SEL action; action = @selector(run:); [bmw performSelector:action]; //写法3 [bmw performSelector:@selector(run:)]; //判断是否为子类 if ([Audi isSubclassOfClass:[Car class]]) { NSLog(@"Audi是Car的子类"); } //判断是否为同一类型 if([Audi class] == [Bmw class]){ NSLog(@"Audi 与 Bmw是同一个类"); } //异常处理 @try { [bmw jiayou];//没有jiayou这个方法 } @catch (NSException *exception) { NSLog(@"异常名称是==>%@,异常原因是===>%@",[exception name],[exception reason]); } @finally { NSLog(@"一定执行的程序,这个方法是私有的"); } } return 0; }
红色那段是异常处理的代码,bmw没有jiayou的方法,但是却调用了,于是出现异常,如果不被捕捉,则程序崩溃.(异常处理在java学习笔记有详细解析.)
相关文章推荐
- Java Web 学习笔记之十一:RestEasy统一处理异常
- Python--小甲鱼学习笔记--第32课:异常处理
- Java异常(Exception)小例子&知识点【Java学习笔记】
- 【ssh学习笔记】struts处理json异常之JSONWriter can not access a member of class org.springframework.aop.TruePoin
- MyBatis学习笔记-注解SQL多个参数查询异常处理
- Struts2学习笔记三(异常处理、模型驱动和属性驱动、servlet接口、Preparable接口)
- 【DWR】学习笔记(一):基本配置&&前后台的数据传输与处理
- Guava学习笔记(5)--Throwables简化异常处理
- Scala2.11.7学习笔记(三)控制结构及异常处理
- C#学习笔记13——异常处理
- Java异常处理学习笔记
- 黑马程序员——Java异常处理学习笔记
- Spring Boot学习进阶笔记(五)-异常统一处理
- scala 学习笔记(01) 函数定义、分支、循环、异常处理、递归
- 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin
- Java学习笔记2-异常处理
- Python中的异常处理相关语句基础学习笔记
- php学习笔记——错误异常处理及路径问题
- Oracle数据库学习笔记之异常处理,存储过程
- Python学习笔记--异常处理