Objective-C 2.0 程序设计

合集下载

objective_c课程设计

objective_c课程设计

objective_c课程设计一、课程目标知识目标:1. 学生能理解objective-c的基本语法和结构,掌握面向对象的编程思想。

2. 学生能掌握objective-c中的数据类型、变量、运算符和流程控制语句,并能运用到实际编程中。

3. 学生能理解objective-c中的类和对象的概念,掌握类的定义、属性和方法的声明与实现。

技能目标:1. 学生能运用objective-c编写简单的程序,解决实际问题。

2. 学生能通过objective-c编写程序,实现数据的存储、读取和处理。

3. 学生能运用objective-c进行简单的图形界面设计,实现交互功能。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习主动性和创新意识。

2. 培养学生良好的编程习惯,注重代码规范和程序优化。

3. 培养学生团队合作精神,学会与他人共同解决问题。

课程性质分析:本课程为计算机编程入门课程,旨在让学生掌握objective-c编程语言的基本知识,培养编程思维和解决问题的能力。

学生特点分析:学生为初中年级,对计算机编程有一定的好奇心,但注意力容易分散,需要结合实际案例和趣味性教学。

教学要求:1. 理论与实践相结合,注重实际操作能力的培养。

2. 创设情境,激发学生兴趣,引导学生主动探究。

3. 采用任务驱动法,让学生在实践中掌握知识,提高编程能力。

二、教学内容1. objective-c基础知识:包括编程环境搭建、基本语法、数据类型、变量、常量、运算符、表达式等。

- 教材章节:第一章 objective-c入门2. 程序流程控制:介绍顺序结构、选择结构(if语句、switch语句)、循环结构(for循环、while循环、do-while循环)等。

- 教材章节:第二章 程序流程控制3. 面向对象编程基础:讲解类与对象、属性、方法、封装、继承、多态等概念。

- 教材章节:第三章 面向对象编程4. 数组与字符串操作:介绍数组、字符串的使用,以及相关操作函数。

面向对象程序设计objective-c2

面向对象程序设计objective-c2
142009年7月28日星期二封装encapsulation封装即是接口把实现隐藏起来的机制在c语言中函数是一种被封装起来的实现在oc中数据实例变量也被封装起来152009年7月28日星期二封装封装可以保护实现不受到突如其来的访问的影封装可以使程序设计在抽象层更加明晰让每一个模块的作用更确定封装解放了设计者和实现者双方对数据操纵的顾虑封装使得对实现的维护更加轻松162009年7月28日星期二多态性polymorphism多态性指不同对象对同样的消息有自己不同的执行方式因为每一个类都具有自己的命名空间namespace多态性才得以实现命名空间的作用范围在类的定义之内方法和实例变量都受到命名空间的保护172009年7月28日星期二多态性多态性使得接口设计更加简单多态性使得代码的重用和扩展更加方便182009年7月28日星期二多态性多态性参数重载argumentsoverload运算符重载operatoroverload多态性
每个类都可以是子类或者父类
2009年7月28日星期二
Typically, every class has just one superclass and can have an unlimited number of subc some object-oriented programming languages (though not in Objective-C), a class can h superclass; it can inherit through multiple sources. Instead of a single hierarchy that bra shown in Figure 3-3, multiple inheritance lets some branches of the hierarchy (or of diffe

c面向对象程序设计(第二版)

c面向对象程序设计(第二版)

c面向对象程序设计(第二版)面向对象程序设计是一种以对象为基本单位的编程范式,它强调数据和方法的封装、继承和多态性。

这种设计方法使得软件更加模块化、易于扩展和维护。

《面向对象程序设计(第二版)》这本书深入探讨了面向对象编程的基本概念、原理和实践,适合初学者和有经验的程序员学习。

第一章:面向对象编程基础面向对象编程(OOP)的核心概念包括类、对象、封装、继承和多态。

类是现实世界中某些具有共同特征的事物的抽象,而对象则是类的实例。

封装是将数据和操作这些数据的方法组合在一起,隐藏内部细节,只提供必要的接口。

继承允许新类从现有类中继承属性和方法,而多态性则允许对象以多种形式表现。

第二章:类与对象类是创建对象的蓝图。

定义类时,需要指定其属性(数据成员)和方法(成员函数)。

对象是类的实例,每个对象都拥有自己的状态和行为。

书中通过实例展示了如何定义类和创建对象,以及如何通过构造函数和析构函数管理对象的生命周期。

第三章:封装封装是OOP中最重要的概念之一。

它涉及到隐藏对象的内部状态,只通过公共接口与外界交互。

封装可以提高代码的安全性和可维护性。

书中详细讨论了访问修饰符(public、private、protected)的用法,以及如何使用它们来控制类成员的访问权限。

第四章:继承继承是面向对象编程中的另一个关键概念,它允许创建新的类来扩展或修改现有类的行为。

通过继承,可以避免代码重复,提高代码的复用性。

书中介绍了单继承和多继承的概念,以及如何使用继承来实现代码的层次结构。

第五章:多态性多态性允许对象以多种形式表现。

在OOP中,多态性主要通过虚函数和抽象类来实现。

虚函数允许子类重写父类的方法,而抽象类则定义了一组接口,但具体实现由子类完成。

书中讨论了多态性的实现机制,以及如何在实际编程中应用多态性。

第六章:接口与抽象类接口定义了一组方法,但不提供实现。

抽象类是包含至少一个纯虚函数的类。

它们都用于定义对象的契约,确保对象实现特定的行为。

Objective-C-2.0程序设计-第4章-数据类型和表达式

Objective-C-2.0程序设计-第4章-数据类型和表达式
第4章 数据类型和表达式
第4章 数据类型和表达式
4.1 数据类型和常量 4.2 算数表达式 4.3 赋值运算符 4.4 计算器类 4.5 位运算符 4.6 类型:_Bool、_Complex和_Imaginary
4.1 数据类型和常量
提供4中基本数据类型:、、和。声明为类型的变量只能用于保存整型值, 也就是没有小数位的值。声明为类型的变量可存储浮点数(即包含小数位的 值)。类型和类型一样,只不过前者的精度约是后者精度的两倍而已。最后, 类型可存储单个字符,例如字符a,数字字符6或者一个分号。
4.1.1 类型
在中,整数常量由一个或多个数字的序列组成。序列前的负号表示该值 是一个负数。值158、-10、0都是合法的整数常量。数字中间不允许长如空 格,大于999的值不能用逗号表示(因此,值12,000是一个非法的整数常量, 它必须写成12000)。
中,存在两种特殊的格式,它们用一种非十进制的方式来表示整数常量。 如果整型值的第一位是0,那么这个整数将用八进制计数法来表示。在这种 情况下,该值的其余位必须是合法的八进制数字,那必须是0到7之间的数字。
要用显示 的值,使用字母l作为修饰符并放在整型格式符号i,o和x之前。 这意味着格式符号用十进制格式显示 值,符号用八进制显示值,而符号用பைடு நூலகம் 六进制格式显示值。 可如下使用 的整型数据类型:
在程序输出的第二行,指派给的值是331.79,实际显示成了 331.790009. 事实上,实际显示的值是由使用的特定计算机系统决定的。出 现这种不准确的原因是:计算机内部使用特殊方式表示数字。在计算机内存 中不能精确的表示一些浮点值。
4.1.5 限定词:、 ……
如果直接把限定词放在之前,那么所声明的整型变量在某些计算机上具 有扩展的值域。一个 声明的例子为:

最新Objective-C-2.0程序设计-第15章-数字-字符串和集合PPT课件

最新Objective-C-2.0程序设计-第15章-数字-字符串和集合PPT课件
❖ 到目前讨论过的所有数字数据类型,如int型、 float型和long型都是Objective-C语言中的基本 数据类型,也就是说,它们都不是对象。
❖ 有时需要作为对象使用这些值。
▪ 例如,使用Foundation的对象NSArray,可以设置一个 用于存储值的数组。这些值必须是对象,因此不能将 任何基本数据类型直接存储到这些数组中。要存储任 何基本数据类型,可以使用NSNumber类根据这些数 据类型来创建对象。
武汉大学国际软件学院
Program 15.1 Output 100 abcdef X 100 1.2345e+19 0 Numbers are equal First number is less than second
Objective-C 2.❖下面这行代码为分配给pool的自动释放池 (autoreleasepool)预留了内存空间:
Objective-C 2.0程序设计
武汉大学国际软件学院
15.1 数字对象
// char value myNumber = [NSNumber numberWithChar: ‘X’]; NSLog (@”%c”, [myNumber charValue]); // float value floatNumber = [NSNumber numberWithFloat: 100.00]; NSLog (@”%g”, [floatNumber floatValue]); // double myNumber = [NSNumber numberWithDouble: 12345e+15]; NSLog (@”%lg”, [myNumber doubleValue]); // Wrong access here NSLog (@”%i”, [myNumber integerValue]); // Test two Numbers for equality if ([intNumber isEqualToNumber: floatNumber] == YES) NSLog (@”Numbers are equal”);

Objective-C-2.0程序设计-第5章-循环结构PPT课件

Objective-C-2.0程序设计-第5章-循环结构PPT课件
@autoreleasepool{ int n, triangularNumber; triangularNumber = 0; 输出: for ( n = 1; n <= 200; Tnh=en20+01th) triangular number is 20100 triangularNumber += n;
4
Objective-C 2.0程序设计
5.1 for语句
代码清单5-2的目的是计算第200位三角数。 代码清单5-2
--------------------------------------------------------------------------------------------------// Program to calculate the 200th triangular number // Introduction of the for statement #import <Foundation/Foundation.h> int main (int argc, char *argv[]) {
NSLog (@”The 200th triangular number is %i”,
triangularNumber);
}
return 0;
}
5
- Objective-C 2.0程序设计
武汉大学国际软件学院
5.1 for语句
用于计算第200位三角数的方法其实与5-1中用于计算第8位三角数的方 法是相同的,就是求1到200之间的整数之和。
当不再满足loop_condition条件时,程序继续执行for循环之后的程序语 句。
for语句的最后一部分loop_expression在每次执行循环体之后求值。在 代码清单5-2中,loop_expression的作用是将n的值加1。因此,每次把n的 值加到triangularNumber之后,它的值都要加1。

Objective-C 2.0 运行时系统编程指南

Objective-C 2.0 运行时系统编程指南

objc_msgSend 则以消息接收者对象为参数调用,调用该选标对应的方法实现。
这就是在运行时系统中选择方法实现的方式。在面向对象编程中,一般称作方法和消息动态绑定的过程。 为了加快消息的处理过程,运行时系统通常会将使用过的方法选标和方法实现的地址放入缓存中。每个类 都有一个独立的缓存,同时包括继承的方法和在该类中定义的方法。消息函数会首先检查消息接收者对象 对应的类的缓存(理论上,如果一个方法被使用过一次,那么它很可能被再次使用)。如果在缓存中已经 有了需要的方法选标,则消息仅仅比函数调用慢一点点。如果程序运行了足够长的时间,几乎每个消息都 能在缓存中找到方法实现。程序运行时,缓存也将随着新的消息的增加而增加。
本文档的组织结构
本文档包括如下章节:

“运行时系统的版本和平台” 和运行时系统的交互” “消息” “动态方法解析” “消息转发” “类型编码” “属性声明”
参考
Objective-C 2.0 运行时系统参考库描述了Objective-C运行库的数据结构和函数接口。 您的程序可以通过这 些接口来和Objective-C运行时系统交互。例如,您可以增加一个类或者方法,或者获得所有类的定义列表 等。 Objective-C 2.0 程序设计语言介绍了Objective-C语言本身。 Objective-C 版本说明给出了在最近版本的Mac OS X系统中关于Objecitive-C运行时系统的一些改动。
通过类NSObject的方法
Cocoa程序中绝大部分类都是NSObject类的子类, 所以大部分都继承了NSObject类的方法, 因而继承 了NSObject的行为。(NSProxy类是个例外;更多细节参考““消息转发”一节。)然而,某些情况下,

Objective-C_2.0_Mac和iOS开发实践指南

Objective-C_2.0_Mac和iOS开发实践指南

Objective-C 2.0 Mac和iOS开发实践指南第1章 C,Objective-C的基础• 1.1 C程序的结构• 1.1.1 main函数• 1.1.2 格式化• 1.1.3 注释• 1.1.4 变量和函数名• 1.1.5 命名惯例• 1.1.6 文件• 1.2.1 整数类型• 1.2.2 浮点类型• 1.2.3 真值• 1.2.4 初始化• 1.2.5 指针• 1.2.6 数组• 1.2.7 字符串• 1.2.8 结构• 1.2.9 typedef• 1.2.10 枚举常量• 1.3.1 算术运算符• 1.3.2 余数运算符• 1.3.3 自增和自减运算符• 1.3.4 优先级• 1.3.5 取反• 1.3.6 比较• 1.3.7 逻辑运算符• 1.3.8 逻辑取反• 1.3.9 赋值运算符• 1.3.10 转换和强制类型转换• 1.3.11 其他赋值运算符• 1.4.1 表达式• 1.4.2 计算表达式• 1.4.3 语句• 1.4.4 复合语句• 1.5 程序流程• 1.5.1 if• 1.5.2 条件表达式• 1.5.3 while• 1.5.4 do-while• 1.5.5 for• 1.5.6 break• 1.5.7 continue• 1.5.8 逗号表达式• 1.5.9 switch• 1.5.10 goto• 1.5.11 函数• 1.5.12 声明函数• 1.6.1 包含文件• 1.6.2 #define• 1.6.3 条件编译• 1.7 printf• 1.8 使用gcc和gdb• 1.9 小结• 1.10 练习第2章 C变量• 2.1 Objective-C程序的内存布局• 2.2 自动变量• 2.3 外部变量• 2.4.1 auto• 2.4.2 extern• 2.4.3 static• 2.4.4 register• 2.4.5 const• 2.4.6 volatile• 2.5.1 自动变量的作用域• 2.5.2 复合语句和作用域• 2.5.3 外部变量的作用域• 2.6 动态分配• 2.7 小结• 2.8 练习第3章• 3.1 面向对象编程• 3.1.1 类和实例• 3.1.2 方法• 3.1.3 封装• 3.1.4 继承• 3.1.5 多态• 3.1.6 面向对象语言的主要特点是什么• 3.2 Objective-C简介• 3.2.1 定义类• 3.2.2 类名作为类型• 3.2.3 消息(调用方法)• 3.2.4 类对象和对象创建• 3.2.5 内存管理• 3.3.1 运行时• 3.3.2 名称• 3.3.3 消息表达式• 3.3.4 编译器指令• 3.3.5 直接量字符串• 3.3.6 Objective-C关键字• 3.3.7 Cocoa数字类型• 3.4 小结第1章 C,Objective-C的基础1.1 C程序的结构第一部分 Objective-C简介本书第一部分是Objective-C的简介。

Objective-C-2.0程序设计-第2章-Objective-C程序设计

Objective-C-2.0程序设计-第2章-Objective-C程序设计

2.2 解释第一个程序
程序的第一行引入了注释的概念
向程序中插入注释时,有两种方法。 1。使用两个连续的斜杠()。双斜杠后知道这行结尾的任何字符都将被编译器忽 略 2。以字符/和*开始,已*和/结束。在开始标记和结束标记之间的所有字符都被看 做注释语句的一部分。通常使用这种方法实现多行注释。但此方法不能嵌套使用。 在编写程序时,应该养成在程序中插入注释的习惯
2.1.1 使用
是一款功能齐全的用用程序,使用它可以轻松输入,编译, 调试和执行程序。
启动,在菜单下,选择 。
2.1.1 使用
在左侧窗口中,找到 .在右上窗格中,突出显示
2.1.1 使用
单击,打开新窗口
我们将第一个程序命名 为1,所以在 字段中输入 “1”。如此创建一个单独 的文件夹来存储所有的项 目。
是不完整的
2.1.1 使用
修改编辑窗口中显示的程序,使之与代码清单2-1相符。 现在应该编译并运行第一个程序了。但是首先应保存程序,从菜单中选择。 如果在未保存文件的情况下尝试编译并运行程序,会询问你是否保存,此时选 择保存即可。 在菜单下,可以选择或者 。 如果程序中有错误,在此步骤期间会看到列出的错误消息。此时,可以根据 错误信息的提示,在编辑窗口修改错误,然后再次重复此过程。 当程序中没有错误时,会出现一个新窗口,显示1 。这个窗口中包含了程序 的输出,如下所示。若该窗口未出现,从菜单中选择即可。
在本书中,所有的项目 保存在 的文件夹中。即1文 件夹放在 文件夹中。
2.1.1 使用
单击按钮创建新项目,显示项目窗口如下:
2.1.1 使用
在右上窗格中选择文件1,此 时出现窗口如右图所示
在窗口的右下侧显示了文件1并包含了一下代码: <> ( , * []) {

ObjectiveC_2.0_Mac和iOS开发实践指南

ObjectiveC_2.0_Mac和iOS开发实践指南

前言 2011-02-21 14:53 李强译机械工业出版社我要评论(0)•摘要:《Objective-C 2.0 Mac和iOS开发实践指南》本书专门为那些想要学习Objective-C以便为Mac OS X或iOS编写程序的程序员量身打造。

本书分为四部分。

第一部分介绍学习Objective-C编程所需的C语言基础知识。

第二部分介绍Objective-C编程的核心知识,包括消息机制、类和对象、类对象等。

第三部分介绍Objective-C中的高级概念,包括引用计数、垃圾收集和Objective-C 2.0的新功能块。

第四部分提供了Objective-C程序员常用的信息和资料。

本书大多数章末都提供了练习,读者可以通过练习巩固在书中学到的知识。

本节为前言部分。

•标签:Objective-C 2.0iOS开发Objective-C 2.0 Mac和iOS开发实践指南•前言Objective-C是C语言的面向对象扩展。

可以将其称为“带有对象的C”。

如果你对学习Objective-C感兴趣,通过学习可以针对Mac OS X或iOS编写程序。

但是,还存在学习Objective-C的另一个原因,那就是它是一门有趣的语言,并且相对容易学习。

和现实世界的任何其他东西一样,Objective-C也有一些难点。

但是,总体来说,它是比其他面向对象语言简单得多的一种语言,特别是和C++相比。

Objective-C对C语言所进行的扩展,只需要一两页篇幅就能列举出来。

在Apple的世界中,Objective-C并不是单独工作的。

它与称为框架的两个类库一起使用。

Foundation框架包含了用于基本实体的类,例如,字符串和数组,以及包装了与操作系统进行交互的类。

AppKit包含了用于窗口、视图、菜单、按钮及构建图形用户界面所需的其他各种挂件的类。

将这两个框架综合起来就是Cocoa。

在iOS中用一个叫做UIKit的不同框架取代了AppKit。

Objective-C 2.0程序设计 第20章-Cocoa简介

Objective-C 2.0程序设计 第20章-Cocoa简介
Objective-C 2.0程序设计
武汉大学国际软件学院
武汉大学国际软件Байду номын сангаас院
Objective-C 2.0程序设计
目录
20.1 框架层 20.2 接触Cocoa
武汉大学国际软件学院
Objective-C 2.0程序设计
20.1 框架层
武汉大学国际软件学院
Objective-C 2.0程序设计
20.1 框架层
武汉大学国际软件学院
内核以设备驱动程序的形式提供与硬件的底层通信。 它负责管理系统资源,包括调度要执行的程序、管 理内存和电源,以及执行基本的I/O操作。 核心服务提供的支持比它上面层次更加底层或更加 “核心”。例如,这里提供对集合、网络、 调试、 文件管理、文件夹、内存管理、线程、时间和电源 的管理。 应用程序服务层包含对打印和图形呈现的支持,包 括Quartz、OpenGL和Quicktime。 Cocoa层直接位于应用程序层之下。正如图所 示, Cocoa包括Foundation禾口AppKit框架0 Foundation框架提供的类用于处理集合、字符串、 内存管理、文件系统‘存档等。AppKit框架提供的 类用于管理视图、窗口、文档和让Mac OS X闻名 于世的多信息用户界面。
另外cocoatouch还提供使用加速器它与gps和wifi信号一样都能跟綜你的位置的类和触摸式界面并且去掉了不需要的类比如支持打印
第20章 Cocoa简介
Cocoa简介
Cocoa是一种支持应用程序提供丰富用户体验的 框架,它实际上由两个框架组成:你已经熟知的 Foundation框架,以及Application Kit (或AppKit)框架。后者提供与窗口、按钮、列 表等相关的类。
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//Complex.m Complex类实现 #import "Complex.h" @implementation Complex - (void) setReal: (int) r { real = r; }
- (int) real { return real; } -(void) print { NSLog(@"real = %i , imag = %i",real, imag); } +(void) classMethodCall { NSLog(@"类方法调用"); }
变量命名规则 1. 以 “_”、“字母”、“$”符号开头 2. 不能与Object-C中保留的关键字相同
self interface protocol readwrite super property init alloc readonly synthesize optional required end assign encode strong new nil retain copy atomic NSNull id release delloc
//根类Root @interface Root : NSObject { int x; }
-(void)setX; @end @implementation root -(void)setX { x = 10; } @end
//类A继承Root类 @interface A: Root -(void)printX; @end @implementation root -(void)printX { NSLog(@”%@”,x); } @end
- (void)init; //继承自NSObject类
- (void) setReal: (int) r; - (void)setImag: (int) i; - (int) real; - (int) imag; - (void) print; -(void) setReal: (int) r withImag: (int) i; +(void) classMethodCall; @end
类外部
对象名.属性名 = value var = 对象名.属性名 }
//使用点语法取值 NSLog(@" real = %i , imag = % ", A.real, A.imag);
return 0;
}
Object-C中所有的类都有一个共同的根类NSObject,当定义一个新类时,它会继承父 类的成员变量与成员函数。Object-C只支持单根继承。
int main() { A *a = [[A alloc] init]; [a setX]; [a printX]; //输出10 return 0; }
方法重写,指子类重新实现了父类方法。
//根类Root @interface Root : NSObject { int x; }
-(void)setX; @end //类A继承Root类 @interface A: Root { } -(void)setX; -(void)printX; @end @implementation root -(void)setX { x = 20; } @end
类方法 +(返回类型)方法名: (参数类型)参数名 … 参数n: (参数类型)参数名 + (void) doSomeThing;
//complex.h
Complex类的声明
#import <Foundation/Foundation.h>
@interface Complex: NSObject { int real; //实部 int imag; //虚部 }
@end
@implementation Root -(void)setX { x = 10; } @end
int main() { A *a = [[A alloc] init]; [a setX]; //x = 20; [a callSuperSetX];//x=10; }
分类是对原类的扩展,无须对源代码修改,就可增加原类的功能。 分类的声明 @interface 原类名 (分类名) 扩展方法 @end
switch语句 switch() { case: break; …… case: break; default: }
if() {} else if() {} //可以不加else
文件名.h
文件名.m @implementation 类名 实例方法实现 类方法实现 @end
@interface 类名:父类 { 成员变量声明 } 实例方法声明
图1 Object – C中关键字
for语句 例: for(int i = 0; i < 10; i++) { … }
do while 语句
例 do {
i++;
} while(i < 10)
while语句 例: while(i < 10) { ….. i++; }
if语句
if() { } if(判断条件) { } else { }
- (void) setImag: (int) i { imag = i; } - (int) imag { return imag; } -(void) setReal: (int) r withImag: (int) i { real = r; imag = i; } @end
int main(int argc , char * argv[]) { @autoreleasepool { Complex *A = [[Complex alloc] init]; [A setReal:6]; //单参数方法调用 [A setImag:8]; //单参数方法调用 [A print]; //无参数方法调用
int main() { A *a = [[A alloc] init]; [a setX]; //x = 20; [a setX: 30]; //x = 30; }
super关键词,在子类中super代表其直接继承的父类,使用super可以访问父类中重写 的方法。调用形式:[super 方法]。 //根类Root @interface Root : NSObject { int x; } -(void)setX; //类A继承Root类 @interface A: Root { } -(void)setX; -(void)callSuperSetX; -(void)printX; @end @implementation A -(void)setX{ x = 20; } -(void)callSuperSetX{ [super setX]; } @end
类方法声明 @end
实例方法 -(返回类型)方法名: (参数类型)参数名 … 参数n: (参数类型)参数名 - (void) setReal: (int) real ; - (void) setReal: (int) real withImag: (int) imag ; //单参数方法 //2参数方法
id类型,可以存储任何类型的变量,表示通用对象类型。 id obj = [[Complex [obj setReal:3]; [obj setImag:2]; 动态绑定,在运行时先判断对象所属的类,然后确定需要动态调用的方法,而不是 在编译的时候。 //Fraction与Complex类中都定义print方法 Fraction *f1 = [[Fraction alloc] init]; Complex *c1 = [[Complex alloc] init]; id obj = f1; [obj print]; obj = c1; [c1 print]; alloc] init];
分类的实现 @implementation 原类名 (分类名) 扩展方法 @end
//分类实现文件 Complex + operation.m //分类头文件 Complex + operation.h @implementation Complex(operation) #import < Complex.h > @interface Complex (operation) -(Complex *) add: (Complex *) a; //加 -(Complex *)subtract: (Complex *)s; //减 @end; - (Complex *) subtract: (Complex *)s { Complex *temp = [[Complex alloc] init]; temp.real = self.real - a.real; temp.imag = self.imag - a.imag;} return temp; } - (Complex *) add: (Complex *)a { Complex *temp = [[Complex alloc] init]; temp.real = self.real + a.real; temp.imag = self.imag + a.imag; return temp; }
[A setReal: 5 withImag: 10]; //2参数方法调用
[Complex classMethodCalled];//类方法调用 }
return 0;
}
例1可简化为: @interface Complex: NSObject @property int real; @property int imag; - (void) print; -(void) setReal: (int) r withImag: (int) i; +(void) classMethodCall; @end @end @implementation Complex @synthesize real; @synthesize imag;
相关文档
最新文档