本篇博文 以及 接下来的博文 都要讲述 如何使用 基础框架所提供的基本物件。这些物件 包括 数字、字符串、集合、字典等。
基础框架 包含了 大量的物件类型、措施 和 函数。在Mac OS X当中,大约 可以找到 125个头文件。为了 方便,我们 在程序中 仅仅 导入一个文件 就可以了:
由于 在Foundation.h这个文件当中,已经导入了 基础框架中 所有的其它头文件,你 没有 必要 担心 你 是不是 导入了 正确的头文件。
在本篇博文 和 接下来的博文当中,每个我所用到的物件 我 都要导入 相应的头文件。这样 可以使 大家 熟悉 每个头文件 都包含了 哪些类型的物件。
数字物件
到 目前 为止,我们使用过的所有数字数据类型(比如 整数、浮点、长整数等)都是 objective-c的基本数据类型,但是 他们 并不是 物件。所以 我们 无法 对 他们 采取 措施。虽然 是 这样,我们 很多时候 还是 需要 把 这些数值 当作 物件 使用。在基础框架当中 有 一类物件 叫做 NSArray。每个NSArray类型的物件 都代表 一个数组。而 每个这样的数组中的每个元素 都 必须 是 物件。于是 我们 不能把 基本类型的数据 直接 存储 到NSArray数组当中。所以 我们 必须创建 NSNumber类型的物件,并且 将 数值 存储 在每个NSNumber类型的物件当中,最后 NSNumber类型的物件 就可以存储 在NSArray类型的数组当中了。接下来 我们 需要 从实际例子当中 了解 如何使用 NSNumber类型的物件 来代表 各种类型的数值。
在这个程序当中
这三行语句 分别 创建了 三个NSNumber *类型的变量:myNumber、floatNumber 和 integerNumber。这三个变量 可以 分别 存储 三个NSNumber类型的物件。
接着
这行语句 将 numberWithInteger:这个消息 传递给 NSNumber这类物件,并且将 100 作为参数。NSNumber这类物件 收到 numberWithInteger:这个消息后,会将 一个代表整数100的物件的内存地址 存储 在变量integerNumber当中。这样 我们 就可以说 integerNumber 是 一个代表整数100的物件了。
然后
这行语句 integerNumber这个物件 采取了 integerValue这项措施,将 物件integerNumber中的整数100 提取出来,并且存储 在变量myInteger当中。最后
将 变量myInteger的值 以长整数的形式 显示出来。
在这个程序剩下的部分当中
numberWithLong:这个消息 会通知 NSNumber这类物件 生成 一个代表长整数的物件,并且 将 其附带的参数值 作为 这个物件所代表的长整数的值;
numberWithChar:这个消息 会通知 NSNumber这类物件 生成 一个代表单个字符的物件,并且 将 其参数中的字符 作为 这个物件所代表的字符。
numberWithFloat:这个消息 会通知 NSNumber这类物件 生成 一个代表浮点数值的物件,并且 将 其附带的参数 作为 这个物件所代表的浮点数值。
numberWithDouble:这个消息 会通知 NSNumber这类物件 生成 一个代表双精度数值的物件,并且 将 其附带的参数 作为 这个物件所代表的双精度数值。
longValue这项措施 会将 其实施对象 转换成 long int类型的数值,也就是 长整数类型数值。
floatValue这项措施 会将 其实施对象 转换成 float类型的数值,也就是 浮点类型数值。
doubleValue这项措施 会将 其实施对象 转换成 double类型的数值,也就是 双精度类型数值。
isEqualToNumber:这项措施 会判断 其实施对象 和 参数所代表的值 是否相等,如果 相等,就产生出 结果YES;如果 不相等,则产生出 结果NO。
compare:这项措施 会对比 其实施对象 和 参数所代表的值。如果 这项措施的实施对象所代表的值 小于 其参数所代表的值,那么 这项措施 就会产生出 结果NSOrderedAscending;如果 这项措施的实施对象所代表的值 大于 其参数所代表的值,那么 这项措施 就会产生出 结果NSOrderedDescending;如果 实施对象所代表的值 与 其参数所代表的值 相等,那么 这项措施 就会产生出 结果NSOrderedSame。
运行 这个程序后,可以得到 如下的结果: