动态绑定确定在运行时而不是在编译时调用的方法。 动态绑定也称为后期绑定。 在Objective-C中,所有方法都在运行时动态解析。执行的确切代码由方法名称(选择器)和接收对象确定。

动态绑定可实现多态性。例如,考虑一组对象,包括RectangleSquare。 每个对象都有自己的printArea方法实现。

在下面的代码片段中,表达式[anObject printArea]执行的实际代码是在运行时确定的。 运行时系统使用方法运行的选择器来识别anObject的任何类中的适当方法。

下面来看一下解释动态绑定的简单代码 -

 1 #import <Foundation/Foundation.h>
 2
 3 @interface Square:NSObject {
 4    float area;
 5 }
 6
 7 - (void)calculateAreaOfSide:(CGFloat)side;
 8 - (void)printArea;
 9 @end
10
11 @implementation Square
12 - (void)calculateAreaOfSide:(CGFloat)side {
13    area = side * side;
14 }
15
16 - (void)printArea {
17    NSLog(@"The area of square is %f",area);
18 }
19
20 @end
21
22 @interface Rectangle:NSObject {
23    float area;
24 }
25
26 - (void)calculateAreaOfLength:(CGFloat)length andBreadth:(CGFloat)breadth;
27 - (void)printArea;
28 @end
29
30 @implementation  Rectangle
31
32 - (void)calculateAreaOfLength:(CGFloat)length andBreadth:(CGFloat)breadth {
33    area = length * breadth;
34 }
35
36 - (void)printArea {
37    NSLog(@"The area of Rectangle is %f",area);
38 }
39
40 @end
41
42 int main() {
43    Square *square = [[Square alloc]init];
44    [square calculateAreaOfSide:8.0];
45
46    Rectangle *rectangle = [[Rectangle alloc]init];
47    [rectangle calculateAreaOfLength:10.0 andBreadth:20.0];
48
49    NSArray *shapes = [[NSArray alloc]initWithObjects: square, rectangle,nil];
50    id object1 = [shapes objectAtIndex:0];
51    [object1 printArea];
52
53    id object2 = [shapes objectAtIndex:1];
54    [object2 printArea];
55
56    return 0;
57 }

执行上面示例代码,得到以下结果 -

1 2018-11-16 03:16:53.399 main[53860] The area of square is 64.000000
2 2018-11-16 03:16:53.401 main[53860] The area of Rectangle is 200.000000

正如在上面的示例中所看到的,printArea方法是在运行时动态选择调用的。 它是动态绑定的一个示例,在处理类似对象时在很多情况下非常有用。

转载于:https://www.cnblogs.com/strengthen/p/10572088.html

[Objective-C语言教程]动态绑定(32)相关推荐

  1. c语言教程常用32,几个常用运算符

    C语言中唯一一个三元运算符,? :,注意,这个运算符是三元运算符,由问号?和冒号两个符号组成,两个符号将空间分成三部分,分别放三个数据,用法为: 条件 ? 条件成立的返回值Y : 条件不成立的返回值N ...

  2. Xamarin XAML语言教程通过ProgressTo方法对进度条设置

    Xamarin XAML语言教程通过ProgressTo方法对进度条设置 在ProgressBar中定义了一个ProgressTo方法,此方法也可以用来对进度条当前的进行进行设置,ProgressTo ...

  3. Xamarin XAML语言教程使用方法设置进度条进度

    Xamarin XAML语言教程使用方法设置进度条进度 在ProgressBar中定义了一个ProgressTo方法,此方法也可以用来对进度条当前的进行进行设置,ProgressTo与Progress ...

  4. Swift2.0语言教程之类的属性

    Swift2.0语言教程之类的属性 类 虽然函数可以简化代码,但是当一个程序中出现成百上千的函数和变量时,代码还是会显得很混乱.为此,人们又引入了新的类型--类.它是人们构建代码所用的一种通用.灵活的 ...

  5. Swift2.0语言教程之函数嵌套调用形式

    Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还可以调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其他函数:另 ...

  6. c语言如何存储已编译内容,二级C语言教程章节测试13.编译预处理和动态存储分配...

    一.选择题 (1)有以下程序 main() { char p[]={'a', 'b', 'c'}, q[]="abc"; printf("%d %d\n", s ...

  7. 新概念51单片机C语言教程纠错(1)

    寒假突发奇想学了一下51单片机,以前一直在用32系列,这一次用的是郭天祥新概念51单片C语言教程,发现里面一处错误,先写下来以免以后忘掉. 正文第34页讲了如何对单片机总线编码,用了一个单片机控制8个 ...

  8. win10、win7系统64位oracle11g安装教程以及32位plsql连接教程

    win10.win7系统64位oracle11g安装教程以及32位plsql连接教程 转载cxin917 最后发布于2016-02-05 14:16:55 阅读数 24354  收藏 展开 win10 ...

  9. C 语言教程详解——入门到精通

    C 语言是一种通用的.面向过程式的计算机程序设计语言.1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言. C 语言是一种广泛使用的计算机语言,它与 J ...

最新文章

  1. 开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(六)ndoutils安装
  2. VS 的makefile工程
  3. mysql默认几个库_MySQL 安装初始化mysql后,默认几个库介绍
  4. Python Tkinter 常用控件空间位置摆放
  5. 解决Sublime Text打开C++文件出现中文乱码
  6. 电子科技大学计算机读博好毕业,高产博士生读博一年达毕业要求:写论文不无聊...
  7. Visual Studio Code快速删除空行及几个常用快捷键总结
  8. 环境变量environ
  9. BAT文件执行完成后如何删除自身的解决办法
  10. numpy ndarray可用的常规函数
  11. elasticsearch6.x.x logstash6.x.x kibana6.x.x Filebeat6.x 配置及安装 CentOS7.3或更高
  12. CTCS列控系统原理--详细学习笔记
  13. python基础入门(超详细)
  14. 需求分析-4 用例分析
  15. Typora 自定义皮肤
  16. 游戏分类与热点探索——【作业1】
  17. Hulu推荐 | 五年口碑依旧百分百好评?《汉密尔顿》上线Disney+
  18. Swift - 微信聊天群头像实现 (群聊的组合头像)
  19. 《Android Studio 实战》总结一
  20. ~2 ccf 2022-03-1 未初始化警告

热门文章

  1. vue-环境变量和模式
  2. linux的xmgrace无法运行,科学网—安装xmgrace - 林绪波的博文
  3. js保留两位小数的函数_使用率低但功能强大的6个Excel函数公式应用技巧解读!...
  4. html日期选择框_第十课 日期选择框(datepicker)的操作
  5. css3-12 transition+css或transform实现过渡动画
  6. Effective C++ 条款21
  7. [REGEX] 匹配任意字符(包括换行符)
  8. VS2012 发布网站步骤
  9. 注册COM组件cmd(管理员权限)
  10. SharePoint中的权限体系