NSMutableArray是NSArray的可變子類,支持動態增刪改查。本文演示從不可變數組創建、指定位置插入、刪除對象、遍歷等核心操作。
// 1. 從不可變數組初始化
NSArray *array = @[@1, @2, @3];
NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithArray:array];
// 2. 直接創建空可變數組
NSMutableArray *array2 = [NSMutableArray array];
insertObject:atIndex:NSString *str = @"one";
[mutableArray insertObject:str atIndex:2]; // 索引不能超過count
NSLog(@"%@", mutableArray);
[mutableArray removeObject:str]; 會刪除數組中所有與str地址相同的元素。[mutableArray removeObjectAtIndex:0];[mutableArray removeAllObjects];[mutableArray addObject:@"four"]; // 尾部追加
[mutableArray addObjectsFromArray:@[@"five", @"six"]; // 批量追加
for (NSString *s in mutableArray) {
NSLog(@"%@", s);
// 注意:遍歷過程中修改數組會崩潰,需先收集索引再刪除
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSArray *array = @[@1, @2, @3];
NSMutableArray *mArray = [[NSMutableArray alloc] initWithArray:array];
NSString *str = @"one";
[mArray insertObject:str atIndex:2];
NSLog(@"插入後: %@", mArray); // (1, 2, "one", 3)
[mArray addObject:str]; // 再次添加同一對象
NSLog(@"再次添加: %@", mArray); // (1, 2, "one", 3, "one")
[mArray removeObject:str]; // 刪除所有@"one"
NSLog(@"刪除one: %@", mArray); // (1, 2, 3)
[mArray removeAllObjects];
[mArray addObject:@"4"];
NSLog(@"清空後加4: %@", mArray); // ("4")
}
return 0;
}
NSMutableArray 非線程安全,多線程環境需加鎖(@synchronized或NSLock)或使用dispatch_queue串行化。NSMutableArray的insertObject:atIndex:0為O(n),大數據量可改用雙端隊列或鏈表。initWithCapacity:減少擴容開銷。掌握NSMutableArray的創建與增刪改查,是iOS/macOS開發處理動態集合的基礎技能。