int、 NSInteger、 NSUInteger、NSNumber之间的区别

来源:互联网 发布:thinkphp oa系统源码 编辑:程序博客网 时间:2024/05/18 03:43

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也正常显示了!

阅读全文
0 0
原创粉丝点击