objective-c
文章平均质量分 88
Alex1226
这个作者很懒,什么都没留下…
展开
-
八十、基础框架(三十八)复制 物件
转自:http://www.tongwenguan.com/接下来 我们 要讨论 关于复制物件的微妙之处。我们 要引入 浅层复制 VS 深层复制的概念 以及 讨论 如何复制 基础框架中的物件。在讨论 继承的时候,我们 讨论过 如果用 等号 连接 一个物件 和 一个变量 会发生 什么,就像 这样:1origin=point;转载 2012-10-30 09:53:27 · 375 阅读 · 0 评论 -
二、物件(又 称为 对象)
本篇博文 要介绍 物件。在日常生活中 任何一件东西 都是 物件。由于 你 可以对 任何物件 做出 很多事情,所以 很多人 就把 物件 称为 对象。不过 我 个人 认为 物件这个词 更加 贴切 一些。在c语言中,你 只需要思考 做 什么事情,再 考虑 什么东西,也就是 物件。而 在objective-c里面,这 是 完全 相反的。转载 2012-10-26 10:37:35 · 860 阅读 · 0 评论 -
三、个体(又称为 实例) 和 措施(又称为 方法)
一类事物中的某一个 我们 称为 个体(主流书籍中 称为 实例,但是 我个人 认为 个体这个词 更加 贴切)。对某个个体做出的事情 我们 称为 措施(同样 主流的说法 是 “方法”,但是 无法体现出 这个词的本意)。在一些情况下,我们 可以对 一类事物中的某个个体 采取 某种措施;也可以对 这类事物本身 采取 这种措施。比如,你 可以对 你的转载 2012-10-26 10:38:27 · 501 阅读 · 0 评论 -
四、在objective-c当中 创建 一类物件
现在 是 时候 在objective-c当中 创建 某一类物件了。假设 你 想 在程序中 创建 比例这类物件。汽车这类物件 通常 是 由外壳、发动机、油箱等 组成的。同样的道理 比例 应该 是 由分子、分母 和 斜杠 组成的。当你 去买 汽车的时候,你 先 去买 外壳,然后 去买 发动机,再然后 去买 油箱 等等,最后 你 在家转载 2012-10-26 10:40:46 · 518 阅读 · 0 评论 -
五、在objective-当中 创建 同一类型的不同物件
上面这个程序的接口部分 和 实施部分 与 先前博文中的例子 保持 一致。在程序部分创建了 两个Fraction类型的物件successFraction 和 failureFraction。物件successFraction 用来表示 及格比例;物件failureFraction 用来表示 不及格比例。这两个语句 对 物件succ转载 2012-10-26 10:44:17 · 335 阅读 · 0 评论 -
六、读取 个体变量 和 数据封装
在先前的博文中,我 制定了 setNumerator 和 setDenominator这两项措施:这两项措施的作用 是 将 参数n 和 d的值 存储 在某个物件的个体变量numerator 和 denominator当中。比如:就是 将 参数1 存储 在物件myFraction的个体变量numerator当中,而则是转载 2012-10-26 10:47:17 · 741 阅读 · 0 评论 -
七、id类型的数据
因为 id类型的数据 在c语言中 是 没有的,于是 需要提出来。在objective-c当中,任何物件 都属于 id类型的数据。比如第一行的alloc这项措施 将 一个Fraction类型的物件 存储 在变量myFraction当中,所以 alloc这项措施 传回的 是 id类型的数据。第二行init这项措施 对 myFraction这个物件转载 2012-10-26 10:48:24 · 478 阅读 · 0 评论 -
九、自动 生成 读写措施
在之前的若干篇博文当中 我 创建过 Fration这类物件,同时 又 创建过 一个Fraction类型的物件myFration。由于 人类 都有 心、肝、肺等内脏,所以 每个新出生的婴儿 也都有心、肝、肺等内脏。同样的道理:由于 Fration这类物件 都包含 numerator 和 denominator这两个变量,所以 新创建的物件myFration 也转载 2012-10-26 11:00:27 · 351 阅读 · 0 评论 -
十、利用 . 对 物件的变量 进行读写
在先前的博文中,我 在程序的接口部分(也就是 文件Fraction.h) 加入了同时 又 在程序的实施部分(也就是 文件Fraction.m) 加入了于是 编译器 就会 自动 生成 numerator、setNumerator两项措施 和 denominator、setDenominator两项措施。比如 我 创建了 一个F转载 2012-10-26 11:07:20 · 251 阅读 · 0 评论 -
十一、一项措施 附带 多个参数
在本篇博文中 我 要继续使用 Fraction这类物件。在先前的例子当中 我 采取了 两项措施 分别 给 Fraction类型的物件 设定 其变量numerator 和 denominator的值。如果 只需要 一项措施 就能设定 一个物件所包含的两个变量的值,那么 事情 就会变得 更加 轻松。事实上,objective-c 确实 允许 开发者转载 2012-10-26 11:10:52 · 308 阅读 · 0 评论 -
十四、措施变量
任何一项措施的参数名称 都是 本地变量。实施 某项措施时,传递给这项措施的参数 都会 被存储 在这些本地变量当中。因为 任何一项措施 都 只处理 这些参数的“复制品”,所以 这些措施 无法改变 这些参数原来的值。我 举 一个例子,以便 更好地 说明 这一点。比如 我 有一项措施 叫作 calculate,就像 这样:实施 calc转载 2012-10-27 23:51:57 · 257 阅读 · 0 评论 -
十六、在措施内部 创建 物件,并 将 其 传递给 措施实施者
在以前的博文中,Add:这项措施 只是 将 两个比例相加之和 存储 在其实施对象当中。在本篇博文中 我 会编写 一项新的Add:措施。这项新的Add:措施 会创建一个新的Fraction类型的物件 用来代表 两个比例相加之和,并且 将 这个新的Fraction类型的物件 传递给 实施Add:这项措施的语句。下面 就是 完整的程序:文件Fraction.转载 2012-10-28 00:21:22 · 313 阅读 · 0 评论 -
十七、对 一类物件 和 接口文件 进行扩展
现在 我们 已经开发出 一个小型的措施库,也可以 叫 函数库 或者 类库,我们 可以 针对 Fraction这类物件 实施 这些措施。下面 就是 这些措施:也许 你 并不需要 使用 Fraction这类物件,但是 这里的例子 告诉 你 你 可以 给 这个措施库 添加 新的措施,从而 对 Fraction这类物件 进行扩展。转载 2012-10-28 00:23:06 · 228 阅读 · 0 评论 -
十八、继承(一)一切 从最底层 开始
从这一篇博文 开始,我们 会学到 一些关键的原理,正是 这些原理 使 面向对象编程 变得 强大。这些原理 都是 跟继承 有关的。在以前的博文当中,我 提到过 大类的概念。比如 轿车这类事物 属于 汽车这一大类,而 汽车这类事物 又属于 交通工具这一大类。所以 在objective-c当中,某类物件 可能属于 某一大类物件。如果 某类物件 不属于转载 2012-10-28 00:32:30 · 570 阅读 · 0 评论 -
十九、继承(二)通过继承 进行扩展
继承这种思想 常常 用来对 一类物件 进行扩展。现在 我 在objective-c当中 创建 一类叫Rectangle的物件 来代表 长方形这类事物,就像 下面这样:文件Rectangle.h:文件Rectangle.m:通过Rectangle.h 和 Rectangle.m这两个文件 我 创建了 Rectangle这类物件。转载 2012-10-28 00:38:03 · 287 阅读 · 0 评论 -
二十二、继承(五)一种物件中每一个 都包含 另外一种物件
首先,我 要运行 下面这个程序:文件XY.h:文件XY.m:文件Rectangle.h:文件Rectangle.m:文件main.m:运行 刚刚这个程序后,会得到 这样的结果:你 能解释 为什么 会得到 这样的结果 吗?至此 有 一个事实 我 不得不说了。那转载 2012-10-28 00:50:58 · 364 阅读 · 0 评论 -
二十三、继承(六)重写 措施
我们 注意到 一类物件 可以 从它所属的大类中 继承 已有的措施,你 无法 将 这些继承而来的措施 去掉。但是 我们 可以重写 继承而来的措施,让 这些措施 可以完成 不同的任务。我们 来看看 下面这个程序 是 怎样 办到 这个的:文件ClassA.h:文件ClassA.m:文件ClassB.h:文转载 2012-10-28 00:55:35 · 483 阅读 · 0 评论 -
二十五、继承(八)关键字super 和 重写 dealloc这项措施
现在 我们 已经学会了 如何重写 一项措施。然后 我们 回到 下面这个程序 并且 学习 一种新的方法 来腾空 长方形的位置所占用的内存空间。长方形的位置 在这个程序当中 是 用myRectangle这个物件中所包含的物件location来表示的。文件XY.h:文件XY.m:文件Rectangle.h:文件Rect转载 2012-10-28 01:15:14 · 346 阅读 · 0 评论 -
二十六、继承(九)通过继承 进行扩展:添加 新的个体变量
你 不但 可以通过添加 新的措施 对 一类物件 进行扩展,你 还 可以通过添加 新的个体变量 对 一类物件 进行扩展。无论 通过哪种方式 效果 都 是可以叠加的。你 无法将 继承而来的措施 和 变量 去除,但是 你 可以重写 继承而来的措施 或者 添加 新的措施 和 变量。我们 回到 ClassA 和 ClassB这两类物件,转载 2012-10-28 01:20:38 · 369 阅读 · 0 评论 -
二十七、继承(十)抽象的物件类型
有时候 某些类型的物件的存在目的 就是 让 我们 创建 属于这一类型的另外一类物件。于是 这种类型的物件 就被称为 抽象的物件类型。没有人 会创建 一个属于抽象类型的物件。比如 想一想 最底层的NSObject这类物件,如果 创建 一个NSObject类型的物件,你 能想到 有 什么用吗?“Foundation Framework”,也就是 基础框架,转载 2012-10-28 01:23:08 · 308 阅读 · 0 评论 -
二十八、多态性、动态类型 和 动态绑定(一)多态性:不同的措施 共用 同一个名称
从本篇博文 开始,我 要介绍 关于objective-c的三个特性。它们 分别 是:多态性、动态类型 和 动态绑定。这三个特性 使 objective-c 成为 一种非常强大的编程语言,而且 还 使 objective-c 与 其他面向对象的编程语言,比如 c++,显著不同。在本篇博文当中,我 只 介绍 多态性。多态性 可以使 你 为 不同类转载 2012-10-28 01:48:04 · 365 阅读 · 0 评论 -
二十九、多态性、动态类型 和 动态绑定(二)动态绑定 和 id类型
在以前的博文中 我 简单地 提到过 id这种数据类型,并且 说过 id类型的变量 可以存储 任何类型的物件。在执行 程序的过程中,将 属于不同类型的物件 存储 在id类型的变量中 才会显现出 id这种数据类型的强大功能。先 仔细 研究 下面的程序 及 其运行结果:运行结果:在这个程序当中,我 创建了 一个id类型的变量dat转载 2012-10-28 01:52:05 · 267 阅读 · 0 评论 -
三十一、多态性、动态类型 和 动态绑定(四)id类型 和 静态类型
既然 id类型的变量 可以存储 任何类型的物件,那么 为什么 不用 id类型的变量 来存储 所有类型的物件呢?有 几个原因 使 你 不愿意 这样做。首先,当你 创建 某一类型的变量 来存储 某个特定类型的物件时,你用的 是 静态类型。静态的意思 就是 这个类型的变量 从头到尾 只存储 同一个类型的物件。于是 在这个变量当中 物件的类型转载 2012-10-28 01:57:42 · 367 阅读 · 0 评论 -
三十二、多态性、动态类型 和 动态绑定(五)措施所附带的参数 和 所产生的结果类型
由于 id类型的变量 可以存储 任何类型的物件,所以 对 id类型变量中的物件 采取 任何措施的时候,都 必须 遵守 下面的规则:如果 适用于不同物件类型的不同措施 拥有 相同的名称,那么 这些措施附带的参数 和 产生的结果 必须 是 相同的类型。编译器 会 持续 检查 各类物件。如果 哪些名称相同的措施 附带 不同类型的参数 或者 产转载 2012-10-28 02:10:06 · 266 阅读 · 0 评论 -
三十三、多态性、动态类型 和 动态绑定(六)关于物件类型的问题
如果 你 用 id类型的变量 来存储 物件,而 id类型的变量本身 可以存储 各种类型的物件,那么 很多时候 你 可能会问 这类的问题:1、这个物件 属于 XX类型吗?2、XX这项措施 适用于 这个物件吗?3、这个物件所属的类别 是 包含 在XX这个类别当中,还是 就是 XX这个类别?根据 这些问题的答案,你 可以执行转载 2012-10-28 02:11:04 · 587 阅读 · 0 评论 -
三十四、多态性、动态类型 和 动态绑定(七)用 @try命令 处理 意外情况
好的编程习惯 要求 你 能够 事先 估计 程序可能发生的错误。你 可以检查 可能导致程序非正常终止的条件,并且 把 这些情况 处理好;你 也可以 记录下 错误信息,优雅地 终止 程序 或者 采取 正确的措施。在先前的博文中,我们 已经看到 如何检查 一项措施 是否适用于 一个物件。在避免 错误的情况下,这样的检查 可以防止 对 物件 采转载 2012-10-28 02:12:10 · 270 阅读 · 0 评论 -
三十五、更多数据类型(一)初始化 物件
你 肯定 已经见过 这样的模式:你 先 为 一个新的物件 分配 内存空间,然后 对 其 初始化,就像 这样:然后 你 再 将 一些数值 存储 在新的物件当中:初始化 物件 和 设定 物件的初始值 经常 被整合成 一项措施。比如 你 可以用 initWith::这项措施 同时 初始化 Fraction类型的转载 2012-10-28 16:14:36 · 267 阅读 · 0 评论 -
三十六、更多数据类型(二)控制 个体变量的界限
现在 你 一定知道 适用于某类物件的措施 可以 对 每一个这一类型的物件所包含的个体变量 直接 进行读写。此外 你 也一定知道 如果 某类物件 从包含它们的物件类型中 继承了 某些个体变量,那么 适用于这类物件的措施 也能 对 这些个体变量 直接 进行读写。下面的命令 可以改变 个体变量的界限:@protected这个命令 可以使转载 2012-10-28 16:15:40 · 349 阅读 · 0 评论 -
三十七、类别 和 协议(一)类别
有时 当你 使用 某一类物件时,你 可能会希望 添加 一些新的措施 适用于 这类物件。比如 适用于Fraction这类物件的措施 有 add:,但是 add:这项措施 只能将 两个比例 相加。因此 你 再 添加 三项措施 适用于 Fraction这类物件,从而 可以将 两个比例 相减、相减 和 相除。有 一个很实际的解决法案 就是转载 2012-10-28 16:16:22 · 308 阅读 · 0 评论 -
四十二、类别 和 协议(六)合成物件
我们 已经学到过 有 几种方法 可以扩展 一类物件,比如:创建 属于这类物件的一类新物件、创建 类别等。还有 另外一种方法 就是:创建 一类物件,使 每个这类物件 都包含 其他类型的物件。由于 每个这类物件 都包含 其他类型的物件,所以 这样的物件 被称为 合成物件。回忆一下 Square这类物件。Square这类物件 代表 正方形。之所以 将转载 2012-10-28 16:19:53 · 840 阅读 · 0 评论 -
四十三、基础框架(一)关于 基础框架
框架 就是 由 若干类物件、措施、函数 和 文档 构成的集合。框架的目的 是 让 程序开发 变得 更加 容易。在Mac OS X当中,大约 有 80多种框架 可供使用。有了 这些框架,我们 就 可以使用 Mac的地址簿,烧录 光碟,播放 DVD,用 QuickTime 播放 电影、播放 音乐 等等。基础框架(Foundation F转载 2012-10-28 16:20:46 · 426 阅读 · 0 评论 -
四十四、基础框架(二)数字物件
本篇博文 以及 接下来的博文 都要讲述 如何使用 基础框架所提供的基本物件。这些物件 包括 数字、字符串、集合、字典等。基础框架 包含了 大量的物件类型、措施 和 函数。在Mac OS X当中,大约 可以找到 125个头文件。为了 方便,我们 在程序中 仅仅 导入一个文件 就可以了:1#import 由于 在Foundation.h这个文件转载 2012-10-28 16:21:29 · 461 阅读 · 0 评论 -
四十五、基础框架(三)简单 了解一下 自动释放池
在之前的每一个程序当中 你 都能看见 这样一行语句1NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];这行语句 会创建 一个自动释放池pool,并且 为 自动释放池pool 保留 内存空间。如果 有 物件 添加转载 2012-10-28 16:22:21 · 392 阅读 · 0 评论 -
四十六、基础框架(四)字符串物件
在之前的程序当中,你 也 遇到过 字符串物件的。无论 什么时候,你 将 字符串 放 在一对双引号当中,你 就 创建了 一个字符串物件,就像 这样:1@"编程很有趣。"在基础框架当中,有 一类物件 叫做 NSString。NSString这类物件 就是 字符串物件。在c语言当中 字符串 由 char类型的字符 构成,相应的 NSString类型转载 2012-10-28 16:23:10 · 404 阅读 · 0 评论 -
四十七、基础框架(五)不可修改字符串1
如果 你 创建 一个像这样的字符串物件1@"编程很有趣。"你 是 无法修改 这个物件的内容的。这样的物件 就叫做 不可修改物件。NSString类型的物件 都是 不可修改物件。但是 你 可能 经常 需要修改 字符串当中的某个 或者 某些字符。比如:你 可能 会 想要 从一个字符串当中 删除 一些字符 或者 进行 “查找并替换”的操作。转载 2012-10-28 16:24:02 · 410 阅读 · 0 评论 -
四十九、基础框架(七)可修改字符串
我们 同样 可以创建 NSMutableString这类物件 来代表 字符串。而 NSMutableString类型的字符串中的字符 是 可以修改的。由于 NSMutableString这类物件 包含 在NSString这类物件当中,所以 凡是 适用于NSString这类物件的措施 都 适用于 NSMutableString这类物件。当我们 说 一个字符转载 2012-10-28 16:25:34 · 384 阅读 · 0 评论 -
五十二、基础框架(十)数组物件-生成 质数表
下面这个程序 会生成 一个质数表。由于 我们 需要 不断 将 新的质数 添加 到数组物件当中,所以 我们 需要 使用 可修改的数组物件,也就是 NSMutableArray这类物件。虽然 质数 都 是 整数,但是 我们 无法 将 int类型的数值 直接 存储 到数组物件中。由于 数组物件 只能 存储 物件,所以 我们 必须 将转载 2012-10-28 16:28:01 · 428 阅读 · 0 评论 -
五十三、基础框架(十一)创建 地址簿-1
在这篇博文当中,我们 要 通过创建 地址簿 将之前学到的东西 结合起来。一本地址簿 会包含 若干地址卡。为了方便起见 我们的地址卡 将 只 包含 姓名 和 邮箱地址。我们 可以将 这个概念 扩展 到其他信息上 比如,地址、电话号码等,大家 可以 自己 尝试。另外 Mac OS X 提供了 整套的地址簿框架 并且 拥有 极其 强大的功转载 2012-10-28 16:44:11 · 470 阅读 · 0 评论 -
五十四、基础框架(十二)创建 地址簿-2
我们 已经讨论过 如何 正确地 编写 setName: 和 setEmail:这两项措施,并且 也应该理解了 其中的重要原理。我们 回到 上一篇博文中的程序,让 系统 自动 生成 setName: 和 setEmail:这两项措施。下面 是 修改过后的AddressCard.h文件:12345678910111213141516171819#imp转载 2012-10-28 16:48:51 · 400 阅读 · 0 评论 -
五十五、基础框架(十三)创建 地址簿-3
我们创建的AddressCard这类物件 已经能够 正常 工作了。万一 我 想要创建 许多的地址卡片呢?那么 我们 就需要将 这些地址卡片 搜集起来。于是 我们 就需要创建 AddressBook,也就是 地址簿,这类物件 来代表 搜集起来的卡片。每个AddressBook类型的物件 都会包含 一个可修改的数组物件 用来存储 各张地址卡片。我们创建的Ad转载 2012-10-29 09:47:12 · 338 阅读 · 0 评论