天天看點

Objective-C中的NSArray、NSMutableArray、NSNumber詳解

——–NSArray——–

NSArray是Foundation架構中的重要組成部分,存儲多個資料的,具備數組的能力,是以,NSArray是OC中的數組。特點是隻能存儲OC對象!

特點:

1.基本資料類型不能放到NSArray中;

2.長度是固定的,一旦數組建立完畢之後,元素的長度固定,無法新增,也無法删除元素;

3.每一個元素都是緊挨着的,每一個元素都仍然有自己的下标;

4.元素的類型是id類型。

1). 建立方式

NSArray *arr1 = [NSArray new];
NSArray *arr2 = [[NSArray alloc] init];
NSArray *arr3 = [NSArray array];//以上3種方法建立出來的數組長度為0,沒有任何意義!
NSArray *arr4 = [NSArray arrayWithObject:@"jack"];//隻有1個元素
//最常用的建立數組的方式是
NSArray *arr5 = [NSArray arrayWithObjects:@"jack",@"rose",@"lili",@"lilei",@"hanmeimei",@"ligang",nil];//最後一個元素後一定要寫一個nil表示結束
NSArray *arr6 = [NSArray arrayWithObjects:@"jack",nil,@"lili",@"lilei",@"hanmeimei",@"ligang",nil];//隻有一個元素,碰到nil就結束
NSArray *arr7 = @[@"jack",@"rose",@"lili",@"ligang"];//快速建立,這種情況最後不用加nil,不然報錯
           

2). NSArray數組的使用方法

在NSLog當中直接使用%@就可以列印整個數組内容。

可以利用下标進行通路,NSLog(@”%@”,arr[0]);

等同于方法[arr obejctAtIndex: 0];

arr.count//數組元素的個數,點文法
(BOOL)[arr containsObject:@"lili"]//檢視數組中是否存在lili元素
arr.firstObject
arr.lastObject//取第一個和最後一個元素,注意與arr[0]有差別,如果數組為空,用下标通路報錯,而firstObject方法傳回nil
(NSUInteger)[arr indexOfObject:@"rose"]//查找元素rose在數組中第一次出現的下标,如果沒有找到傳回NotFound。
           

3). 周遊

//第一種方式:使用C語言中的for循環
//第二張方式:使用增強for循環,類似C++中auto
for(NSString *str in arr)//*str又稱疊代變量,執行原理是将數組中的每一個元素指派給疊代變量,再執行循環體
    NSLog(@"%@",*str);
//如果數組當中的元素的類型不一緻,那麼使用id進行周遊for(id item in arr)
//第三種方式:使用block方法
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj,NSUInteger idx,BOOL *stop){
    NSLog(@"%d %@",idx,obj);
    if(idx==)
        *stop = YES;
}];//中間的block部分是預設生産的,obj就是代表數組中的每一個元素,我們要做的事情就是把要周遊數組中元素的操作的代碼部分寫上就好;idx代表是每一個obj元素的下标;如果我們要終止循環,那麼就将stop改為YES即可。
           

4). 字元串與數組

NSArray *arr = @[@"jack",@"jim",@"rose"];
NSString *str = [arr componentsJoinedByString:@"#"];//str内容是jack#jim#rose,參數是連接配接符
NSString *str = @"陝西西安,雁塔區,太白南路,西安電子科技大學";
NSArray *res = [str componentsSeperatedByString:@","];//此時數組中内容是@"陝西西安",@"雁塔區",@"太白南路",@"西安電子科技大學"
           

5). 資料的持久化

将數組中的内容永久儲存(寫到磁盤中)
[arr writetoFile:@"/Users/warwick/Desktop/abc.plist" atomically:NO];//将數組儲存到abc.plist檔案之中,.plist檔案是屬性清單檔案

//讀檔案
NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/warwick/Desktop/abc.plist"]
           

——–NSMutableArray——–

NSMutableArray是NSArray的子類,可以動态的新增和删除其數組中的元素,其他的用法均與NSArray一緻。是以這裡隻讨論與父類不同的用法。

1). 建立方法

NSMutableArray *arr1 = [NSMutableArray new];
NSMutableArray *arr2 = [[NSMutableArray alloc] init];
NSMutableArray *arr3 = [NSMutableArray array];
//注意與NSArray不同,以上3種建立方式是有意義的,原因在于其元素可變!我們可以動态新增與删除元素。
NSMutableArray *arr4 = [NSMutableArray arrayWithObjects:@"jack",@"rose",@"lili",nil];
NSMutableArray *arr5 = @[@"jack",@"rose",@"lili"];//error,因為右值是NSArray對象,arr5是一個子類指針,子類指針指向父類對象當調用自己特有的方法的時候會出問題!
           

2). 元素插入與删除

[arr1 addObject:@"jack"];//數組中有1個元素
NSArray *arr = @[@"rose",@"pony",@"lucy"];
[arr1 addObject:arr];//數組有2個元素,第一個元素是jack,第二個元素是arr數組!
[arr1 addObjectsFromArray:arr];//數組有5個元素,這是将另外一個數組中每一個元素添加到可變數組中的方法

//在指定的下标處插入元素
[arr1 insertObject:@"lilei", atIndex:];
//删除指定下标元素
[arr1 removeObjectAtIndex:];
[arr1 removeObject:@"jack"];//删除全部的jack
[arr1 removeObject:@"lucy" inRange:NSMakeRange(,)];//删除在下标0-3範圍内的lucy
[arr1 removeAllObjects];//删除全部元素
           

——–NSNumber———

解決基本資料類型資料存儲的問題。原理是将基本資料類型包裝為NSNumber對象,再将NSNumber對象存儲到NSArray數組當中。

NSNumber *number1 = [NSNumber numberWithInt:];
NSNumber *number2 = [NSNumber numberWithBool:];
NSNumber *number3 = [NSNumber numberWithDouble:];
NSNumber *number4 = [NSNumber numberWithChar:'a'];

NSArray *arr = @[number1,number2,number3,number4];
for(NSNumber *num in arr)
{
    //對每個元素的操作
}

//簡寫操作
NSArray *arr = @[@,@,@,@];//将包裝有10,20,30,40的NSNumber對象放入到NSArray中