NSNumber与int基本数据类型的比较

刚开始用oc没多久,直接把NSNumber和int类型比较了,结果会有3种,大于小于或者等于,但是哈哈,果然出错了


就像这样

NSNumber *number = self.remoteConfig[@"start_page_show"].numberValue;
int radom = arc4random() % 100;
if (radom < number){
    //do
}

一气呵成的写完这段代码,并没有编译问题和报错,可是这简单的比较运行结果总是不达人意

分析一下
于是我检查了一下上面代码,发现了比较那段被标注为黄色警告(App Code ide)。应该是NSNumber为int包装类型,就像java的Integer。NSNumber和int直接比较就出现问题,可大可小可等于。

随即我用ide提示,发现了[number intValue]解决问题
修改为

if (radom < [number intValue]){
    //do
}

最后
还发现NSNumber有个integerValue方法,返回一个NSInteger,搞得还以为NSInteger是int的包装对象,其实NSInteger与int的区别是NSInteger会通过系统的位数来返回这个整型数据的可用最大值,苹果官方推荐使用NSInteger,不过没有int写起来方便了

还有
NSNumber既然作为对象,自然会有一些对象方法比较大小啦

-(BOOL) isEqualToNumber:
- (NSComparisonResult)compare:(NSNumber *)otherNumber;

不过看着好麻烦,代码也不好读,还是用int基本数据类型的 > = < 吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值