OC--NSArray和NSMutableArray
NSArray:
只能存放物件。不能存放C語言中基本的資料型別。如int/double/float等等
陣列下標越界不會有警告,執行時會直接報錯
// 不可變陣列NSArray
// 在陣列從存入nil需要使用NSNull,不可以直接存入nil,因為在陣列中nil代表陣列結束
NSNull *n = [NSNull null];
// 建立陣列物件,並在其中新增幾個NSString物件,nil代表陣列的結束,不可能更改
NSArray *array1 = [NSArray arrayWithObjects:@"one", @"tow", n, @"three", nil];
NSArray *array2 = [NSArray arrayWithObject:@"呵呵,你真逗。。。。。"];
// 計算陣列的長度
NSLog(@"array1 count : %ld", [array1 count]);
NSLog(@"array2 count : %ld", [array2 count]);
// 取出陣列中得物件
// 簡單的使用for迴圈通過下邊來獲取物件
for (int i = 0; i < [array1 count]; i++) {
NSLog(@"array1[%d] = %@", i, [array1 objectAtIndex:i]);
}
// 以訊息巢狀的形式例項化一個NSArray物件
NSArray *array3 = [[NSArray alloc] initWithObjects:@"abc", @"def", @"haha", nil];
NSLog(@"array3 = %ld", [array3 count]);
NSLog(@"%@", array3); // 陣列使用小括號來包括
// 釋放記憶體
[array3 release];
// 可變陣列NSMutableArray
// 通過arrayWithCapacity:來建立一個可變陣列,指定長度為10
NSMutableArray *mutableArray1 = [NSMutableArray arrayWithCapacity:10];
// 使用類方法建立一個物件
mutableArray1 = [NSMutableArray arrayWithObjects:@"111", nil];
// 通過addObject物件新增物件
[mutableArray1 addObject:@"one"];
[mutableArray1 addObject:@"two"];
[mutableArray1 addObject:@"three"];
// 列印陣列的長度
NSLog(@"mutableArray count = %ld", [mutableArray1 count]);
// 列印陣列
NSLog(@"mutableArray %@", mutableArray1.description);
// 使用for迴圈列印陣列
for (int i = 0; i < [mutableArray1 count]; i++) {
NSLog(@"mutableArray[%d] = %@", i, [mutableArray1 objectAtIndex:i]);
}
// 刪除陣列中得物件
// [mutableArray1 removeLastObject]; // 刪除最後一個物件
// [mutableArray1 removeObject:@"111"]; // 刪除指定名稱的物件
[mutableArray1 removeObjectAtIndex:1]; // 刪除指定位置的物件
// [mutableArray1 removeAllObjects]; // 刪除全部物件
NSLog(@"mutableArray %@", mutableArray1.description);
// 向可變陣列中插入物件, 插入的字串中有空格的時候會被雙引號包圍
[mutableArray1 insertObject:@"new String" atIndex:2 ];
NSLog(@"mutableArray %@", mutableArray1.description);
// 替換陣列中物件 // 存入中文時直接列印陣列會出現"\U7231\U597d"這種形式,需要從陣列中取出來才可以正常顯示
[mutableArray1 replaceObjectAtIndex:3 withObject:@"愛好"];
NSLog(@"mutableArray %@", mutableArray1.description);
NSString *string = [mutableArray1 lastObject];
NSLog(@"%@", string);
// 陣列的替換
// 陣列的簡寫@[@"0", @"2"]
NSRange range = NSMakeRange(1, 2);
// 對應的進行替換
[mutableArray1 replaceObjectsInRange:range withObjectsFromArray:@[@"1111111", @"2222222"]];
NSLog(@"mutableArray %@", mutableArray1.description);
// 陣列的排序
// 可變陣列直接在原陣列上進行排序,不可變陣列排序後產生新的陣列
NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"3", @"6", @"2", @"1", nil];
NSLog(@"%@", array1);
// 使用選擇器進行比較陣列,返回一個升序的陣列
[array1 sortUsingSelector:@selector(compare:)];
NSLog(@"使用選擇排序後: %@", array1);
// 使用sortUsingCompare:
[array1 sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
obj1 = @"1";
obj2 = @"2";
return NSOrderedDescending;
}];
NSLog(@"使用選擇排序後: %@", array1);
// 用規定的描述對陣列進行排序
// NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO];
// [array1 sortUsingSelector:[NSArray arrayWithObject:sd]];
// NSLog(@"%@", array1);
// 陣列的遍歷
// 建立陣列
NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"3", @"6", @"2", @"1", nil];
// 可以通過列舉器和nextObject可以返回當前物件
// 使用NSEnumerator遍歷物件,通過給陣列傳送objectEnumerator獲取到整個陣列的列舉器
NSEnumerator *enumerator = [array1 objectEnumerator];
// 儲存陣列中每個元素物件
id object = nil;
while (object = [enumerator nextObject]) { // 通過nextObject訊息讀取下一個元素物件
NSLog(@"%@", object);
}
// 使用 快速列舉 遍歷陣列取值
id object1 = nil;
for (object1 in array1) {
NSLog(@"%@", object1);
}