您的位置:首页 > 产品设计 > UI/UE

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

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也正常显示了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: