多态、动态类型和动态绑定

多态、动态类型和动态绑定

(参考书Objective-C 2.0 程序设计)

一、概念:

       多态使得能够开发以下程序:来自不同类的对象可以定义共享相同的名称的方法;动态类型能使程序直到执行时才能确定对象所属的类;动态绑定则能使程序直到执行时才能确定要对对象调用的方法

 

二、动态:相同的名称,不同的类

1、程序的执行:Objective-C运行时知道语句中消息的接收者是某类的对象,然后选择定义在该类中的方法来执行。

如:compResult=[c1 add : c2];

[compResult print];                   详细代码请见   P/155

     Fractioncomplex类都包含add: print 方法。

     所以:当Objective-C运行时知道第一条消息的接收者是c1是一个complex对象。

     因此:选择定义在complex类中的add; 方法。

2、其它作用:多态还允许你后来添加新类,这些类能响应相同的方法名。

 

三、动态绑定和id类型

1、Id类型:一种通用类型,可以用来存储属于任何类型的对象。

2、Id类型的作用:可以将任何类型的对象存储到id类型中,并可以对id类型调用于原对象的任何方法。

3、方法调用过程:Objective-C系统总是跟踪对象所属的类。先判定对象所属的类,并因此确定运行时而不是编译时需要动态调用的方法。

      如:datavalue=f1;

      [datavalue print];                              详细代码请见P/156

     在程序执行期间,当系统准备将print消息发送给datavalue时,它首先检查datavalue中存储的对象所属的类。这个变量保存一个Fraction因此使用在Fraction类中定义的print方法。

四、编译时和运行时检查

概念:因为存储在id变量中的对象类型在编译时无法确定,所以一些测试推迟到运行时进行。就是说,推迟到程序执行时。

五、Id类型与静态类型

1、静态类型:“静态”这个词指的是这个变量总是用于存储特定类的对象。存储在这种形态中的对象的类是预定的。编译器能够通过检查来确定应用于对象的方法是哪个类定义的或者由哪个类继承,否则它将显示警告。

注:关心静态形态是因为它能更好的在程序编译阶段而不是在运行时指出错误。如果把它留到运行时,可能在程序运行时,没有发现错误。且可以增强程序的可读性。

2、动态类型的参数和返回类型:

如果在多个类中实现名称相同的方法,那么每个方法都必须符合各个参数的类型和返回值类型。

六、使用@try处理异常

1、程序测试时可能会发生诸多异常导致程序异常终止。可以用@try来处理异常:

2、使用格式: @try

{

statement

statement

……

@catch(NSException *exception)

{

Statement

Statement

……

}

释义:在@try块中加入这些statement后,程序正常运行。但是,如果块中的某一条语句抛出异常,执行不会终止,而是立即跳到@catch块,在那里继续执行。在@catch块内可以处理异常。

示例代码请见 P/165

3、@throw指令:@throw指令允许你抛出自己的异常。可以使用指令抛出特定的异常,或在@catch块内抛出异常。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值