Foundation框架之数字对象

数字对象

Foundation框架提供了一些基本对象,这些对象包括数字,字符串和集合,以及数组,字典,和集合形式使用的成组对象。今天主要讨论其一:数字对象

数字对象
int型, float型,和long型都是OC的基本数据类型, 但是它们都不是对象。也就是说,不能够向它们发送消息。然而,有时需要将这些值作为对象使用。比如,使用Foundation的NSArray对象创建一个数组,它要求存储的值必须是对象,因此,不能将任何基本数据类型直接存储在数组中,如果需要存储基本数据类型(包括char数据类型),可以使用NSNumber类,它会根据这些数据的类型创建对象。

NSNumber类包含多个方法,可以使用初始值创建NSNumber对象,例如语句

NSNumber *intNumber;
intNumber = [NSNumber numberWithInteger: 100];

表示创建一个值为100的整数对象
从NSNumber对象获得的值和存储在对象中的值类型一致,因此,下面这条语句

NSInteger myInt;
myInt = [intNumber integerValue];

获取存储在intNumber中的整数值,将它存储在NSInteger变量myInt中。需要注意的是,这里的NSInteger不是一个对象,而是基本数据类型的typedef。NSUInteger也是类似的typedef,在程序中表示无符号整数。以下给出解释:可以这么理解看出它与64位的long或者32为的int的区别:

NSInteger是一个封装,它会识别当前操作系统的位数,自动返回最大的类型。
定义的代码类似于下:

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64

typedef long NSInteger;

typedef unsigned long NSUInteger;

#else

typedef int NSInteger;

typedef unsigned int NSUInteger;

#endif

对于每种基本数据类型,类方法都能为它创建一个NSNumber对象,并设置为指定的值,这些方法以numberWith开头,紧接数据的类型,如numberWithLong:, numberWithFloat:等,此外,可以使用实例方法将以前创建的 NSNumber对象设置为指定的值,这些都是以initWith开头的,如initWithLong:和initWithFloat:等

比较对象的数值大小的两种方法:

isEqualToNumber:
isEqualToNumber:方法用于比较两个NSNumber对象的数值。程序会返回一个BOOL值,查看这两个值是否相等。使用方法如下:

	if ([intNumber isEqualToNumber: floatNumber] == YES) {
	 ...
	} else {
	...
	}

该代码用于判断intNumber的值是否与floatNumber的值相等

compare:
可以使用compare:方法测试一个值是否在数值上小于,等于或大于另一个值,如消息表达式:

[intNumber compare: myNumber]

intNumber的值小于myNumber的值时,返回NSOrderedAscending;
如果这两个数刚好相等,则返回NSOrderdSame;
如果第一个值大于第二个值,则返回NSOrderedDescending。
使用方法如下:

 if ([intNumber compare: myNumber] == NSOrderedAscendling) {
	...
} else {
	...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值