int、 NSInteger、 NSUInteger、NSNumber之間的區別
阿新 • • 發佈:2019-01-23
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也正常顯示了!