1. 程式人生 > >int、 NSInteger、 NSUInteger、NSNumber之間的區別

int、 NSInteger、 NSUInteger、NSNumber之間的區別

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