int、 NSInteger、 NSUInteger、NSNumber之间的区别
2017-06-09 11:58
645 查看
int : 当使用int类型定义变量的时候,可以像写C程序一样,用int也可以用NSInteger,推荐使用NSInteger ,因为这样就不用考虑设备是32位还是64位了。
NSUInteger:是无符号的,即没有负数
NSInteger:是基础类型,是有符号的。
NSNumber:是一个类,比如在字典,数组中就只能存NSNumber,而不能存放int或者NSInteger这些基本类型。
这里补充一下NSUInteger曾经遇到过的一个坑:
首先创建一个tableview,然后在上面添加一个view
如图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/10/2bc61678049b7aa889e7756691407d00)
如果我们把frame代码改为下面代码就发现不显示了
为啥呢,按理说正常啊,那么打印一下这个-(40*alarmsTypeArray.count)吧
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/10/31dd4759874cd7270332aba534558df1)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/10/8737fa9ef00680b8ce3096d252caf61f)
为啥y的值不是-120呢?我们点alarmsTypeArray.count中的count进去看看才发现问题所在,原来这个count是个NSUInteger属性
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/10/14a1ffc7498c2a95fe6082c55c98bb3d)
那么就对了,alarmsTypeArray.count是NSUInteger(无符号的整数类型)因此-(40*alarmsTypeArray.count)是不行的!这里要先转为CGFloat或者int,NSInteger,之后在加负号
所以代码应该这么写
我们再来打印并看看效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/10/9ab7941c6266f11e0fa7268d32a3fb50)
ok,view也正常显示了!
NSUInteger:是无符号的,即没有负数
NSInteger:是基础类型,是有符号的。
NSNumber:是一个类,比如在字典,数组中就只能存NSNumber,而不能存放int或者NSInteger这些基本类型。
这里补充一下NSUInteger曾经遇到过的一个坑:
首先创建一个tableview,然后在上面添加一个view
UIView *filterview=[[UIView alloc]init]; filterview.backgroundColor=[UIColor redColor]; filterview.frame=CGRectMake(0,-120, 100, 40*alarmsTypeArray.count+60); [self.tableView addSubview:filterview];
如图:
如果我们把frame代码改为下面代码就发现不显示了
NSMutableArray *alarmsTypeArray=[NSMutableArray array]; [alarmsTypeArray addObject:@"a"]; [alarmsTypeArray addObject:@"b"]; [alarmsTypeArray addObject:@"c"]; UIView *filterview=[[UIView alloc]init]; filterview.backgroundColor=[UIColor redColor]; filterview.frame=CGRectMake(0,-(40*alarmsTypeArray.count), 100, 40*alarmsTypeArray.count+60); [self.tableView addSubview:filterview];
为啥呢,按理说正常啊,那么打印一下这个-(40*alarmsTypeArray.count)吧
CGFloat y=-(40*alarmsTypeArray.count); NSLog(@"%f",y); filterview.frame=CGRectMake(0,y, 100, 40*alarmsTypeArray.count+60);
为啥y的值不是-120呢?我们点alarmsTypeArray.count中的count进去看看才发现问题所在,原来这个count是个NSUInteger属性
那么就对了,alarmsTypeArray.count是NSUInteger(无符号的整数类型)因此-(40*alarmsTypeArray.count)是不行的!这里要先转为CGFloat或者int,NSInteger,之后在加负号
所以代码应该这么写
NSMutableArray *alarmsTypeArray=[NSMutableArray array]; [alarmsTypeArray addObject:@"a"]; [alarmsTypeArray addObject:@"b"]; [alarmsTypeArray addObject:@"c"]; UIView *filterview=[[UIView alloc]init]; filterview.backgroundColor=[UIColor redColor]; CGFloat y=40*alarmsTypeArray.count; NSLog(@"--------%f",y); filterview.frame=CGRectMake(0,-y, 100, 40*alarmsTypeArray.count+60); [self.tableView addSubview:filterview];
我们再来打印并看看效果:
ok,view也正常显示了!
相关文章推荐
- 【iOS知识学习】_int、NSInteger、NSUInteger、NSNumber的区别和联系
- 【iOS知识学习】_int、NSInteger、NSUInteger、NSNumber的区别和联系
- int、NSInteger、NSUInteger、NSNumber的区别和联系
- 【iOS】_int、NSInteger、NSUInteger、NSNumber的区别和联系
- int、NSInteger、NSUInteger、NSNumber的区别和联系
- _int、NSInteger、NSUInteger、NSNumber的区别和联系
- int、NSInteger、NSUInteger、NSNumber的区别和联系
- _int、NSInteger、NSUInteger、NSNumber的区别和联系
- 【iOS知识学习】_int、NSInteger、NSUInteger、NSNumber的区别和联系
- int, NSInteger, NSUInteger, NSNumber的区别
- _int、NSInteger、NSUInteger、NSNumber的区别和联系
- 【iOS知识学习】_int、NSInteger、NSUInteger、NSNumber的区别和联系
- 基础知识之_int、NSInteger、NSUInteger、NSNumber的区别和联系
- 【iOS知识学习】_int、NSInteger、NSUInteger、NSNumber的区别和联系
- int, NSInteger, NSUInteger, NSNumber的区别
- int、NSInteger、NSUInteger、NSNumber的区别和联系
- int,NSInteger,NSUInteger,NSNumber区别
- 【iOS知识学习】_int、NSInteger、NSUInteger、NSNumber的区别和联系
- iOS NSInteger/NSUInteger与int/unsigned int、long/unsigned long之间的区别!
- NSInteger 与 NSUInteger 和 int与 NSInteger 区别(转)