在學習 Objective-C的過程當中,感受數組在這一個學習方面是一個比較大的應用域,因此寫這篇隨筆來總結一下。數組
首先聲明的是,與C語言的數組不一樣,Objective-C的是數組只能用來存儲對象,而不是存儲int 、double、char等基礎數據類型,通常要存這些基礎數據類型,對於我這個剛學 Objective-C的新手來講,個人作法是將有關數字的基礎類型 如 int 、double、char首先轉換成一個叫作 NSNumber的類 char*類型的轉換成 Objective-C的字符串 NSString 類來進行儲存,相關 NSNumber 和 NSString 在之後我學習到的時候會來總結一下個人學習成果。學習
Objective-C的數組分爲兩種,一種叫作不可變數組(NSArray),一種叫作可變數組(NSMutableArray),NSMutableArray類是NSArray類的一個子類。spa
(1)不可變數組(NSArray) ---------該類型在肯定以後,不能進行數組元素的更改以及交換對象
//初始化------(兩種方式)rem
NSArray * array =[ [NSArray alloc] initWithObjects:@"abc",@"123",@"ABC", nil]; 字符串
NSArray * array = @[@"abc",@"123",@"ABC"]; //後來看到老師定義數組的時候用這種方式進行的初始化,因此也記錄了下來it
(2)可變數組(NSMutableArray)-------該類型在肯定以後,能夠進行元素的增、刪、改(包括元素的位置 以及 數組的元素個數) for循環
//初始化------(兩種方式)table
NSMutableArray * mutableArray = [[NSMutableArray alloc] init];ast
NSMutableArray * mutableArray = [NSMutableArray array]; //教個人老師演示時的初始化,兩種初始化有沒有區別,或者不一樣,如今先不討論
//增長元素
對於可變數組,蘋果給咱們提供了不少方法,由於新手的緣由,我基本也使用了其中的一種
[mutableArray addObject:(id)]; //這是mutableArray 對象調用增長元素的一個方法
例如:[mutableArray addObject:@"EFG"]; //這是在mutableArray 對象中添加了一個NSString 類型的元素,值爲@"EFG"
// 刪除元素
[mutableArray removeAllObjects]; //這個方法是移除 mutableArray 中的全部元素
[mutableArray removeLastObject]; //這個方法是移除 mutableArray 的最後一個元素
[mutableArray removeObject:(id)]; //這個方法是移除值爲id的元素(這樣描述實際上是不正確的),id實際存放的應該是地址,但字符串除外
例如:[mutableArray removeObject:@"abc"]; //這是在mutableArray 對象中刪除了一個值爲"abc"的元素
[mutableArray removeObjectAtIndex:(NSUInteger)]; //這個方法是移除位置爲 NSUInteger 的元素,這個數字實際是刪除相似下標爲 NSUInteger的元素
例如:[mutableArray removeObjectAtIndex:3]; //這是刪除了第4個元素
//修改元素位置
[mutableArray exchangeObjectAtIndex:(NSUInteger1) withObjectAtIndex:(NSUInteger2)] //這個方法是將位置 NSUInteger1 的元素和 NSUInteger2 的元素進行交換位置
例如:[mutableArray exchangeObjectAtIndex:1 withObjectAtIndex:2];//意思是將第2個元素和第3個元素交換(由於NSUInteger是下標)
/*****
***數組的遍歷 (我所瞭解的目前有三種方式)
****/
一、枚舉器法 (這種方法在遍歷過程當中不能改變數組的個數以及元素的位置,否則會出錯)
NSEnumerator * enumerator = [mutableArray objectEnumerator];//構造枚舉器
id obj;
while (obj = [enumerator nextObject]) {
//obj既爲元素
}
二、快速枚舉法 (有的叫作 快速for循環) (這種方法依舊在遍歷過程當中不能改變數組的個數以及元素的位置,否則會出錯)
for(id obj in mutableArray){
//obj既爲元素
} //這種方法他們都說是最快的,我也就看成最快的來用
對於枚舉器,還有一種叫作逆序枚舉器,方法以下
NSEnumerator *enumrator = [mutableArray reverseObjectEnumerator];//構造逆序枚舉器,用法同枚舉器同樣,但不同的是,用逆序枚舉器遍歷的時 候,以上兩種方法能夠改變數組的個數以及元素的位置。
三、使用for循環進行遍歷 (這種遍歷方法能夠在循環中改變數組的個數以及元素的位置)
for (int i = 0; i < [mutableArray count]; i++) {
id obj = [mutableArray objectAtIndex:i];// obj既爲元素
}