首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言入門

Objective-C 可變陣列(NSMutableArray)建立與基礎操作實戰

     編輯:C 語言入門

前言

在 Objective-C 開發中,NSMutableArray 是處理動態集合的核心工具。與不可變的 NSArray 不同,它允許在運行時靈活增刪元素,極大地提升了資料處理的靈活性。本文將透過實際程式碼示範,詳細解析可變陣列的建立方式、常用操作方法以及注意事項。

核心程式碼解析

#import 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 1. 使用現代語法建立不可變陣列
        NSArray *array = @[@1, @2, @3];
        
        // 2. 以不可變陣列初始化可變陣列(深拷貝)
        NSMutableArray *array2 = [[NSMutableArray alloc] initWithArray:array];
        
        // 3. 指定索引插入元素(索引必須小於 count)
        NSString *str1 = @"one";
        [array2 insertObject:str1 atIndex:2];
        NSLog(@"插入後: %@", array2);
        
        // 4. 新增元素至陣列尾端
        [array2 addObject:str1];
        NSLog(@"新增後: %@", array2);
        
        // 5. 移除所有元素
        [array2 removeAllObjects];
        
        // 6. 重新新增元素驗證
        NSString *str4 = @"4";
        [array2 addObject:str4];
        NSLog(@"重置後: %@", array2);
        
        /* 
        // 錯誤示範:遍歷過程中移除元素會導致崩潰
        for(NSString *str in array2) {
            [array2 removeObjectAtIndex:0]; // 危險操作!
        }
        */
    }
    return 0;
}

關鍵技術點深度解析

1. 陣列建立的兩種路徑

  • 字面量語法:@[@1, @2, @3] 快速建立 NSArray,語法簡潔且型別安全
  • 可變副本轉換:initWithArray: 建立深拷貝,原陣列變更不影響新陣列

2. 插入操作的索引邊界

insertObject:atIndex: 要求索引值範圍為 0 ~ count。若索引等於 count,相當於尾端新增;超出範圍將拋出 NSRangeException。

3. 記憶體管理細節

ARC 環境下,陣列持有元素的強參考。removeAllObjects 會釋放所有元素持有權,但不會釋放陣列本身的記憶體空間(capacity 保留),後續新增元素可復用空間,效能更佳。

4. 遍歷時修改的陷阱

註解掉的 for-in 迴圈展示經典錯誤:快速枚舉期間修改集合會導致程式崩潰。正確做法包括:

  • 建立陣列副本進行遍歷:for (id obj in [array copy])
  • 使用逆向索引迴圈:for (NSUInteger i = array.count; i-- > 0;)
  • 收集待刪除物件,遍歷結束後批次移除

最佳實踐總結

操作方法時間複雜度備註
尾端新增addObject:O(1) 摊銷最常用、效能最佳
指定位置插入insertObject:atIndex:O(n)需移動後續元素
指定位置刪除removeObjectAtIndex:O(n)需移動後續元素
依值刪除removeObject:O(n)會移除所有相等物件
清空陣列removeAllObjectsO(n)保留容量空間

結語

掌握 NSMutableArray 的核心操作與陷阱,是寫出高效、穩定 Objective-C 程式的基石。實際開發中,建議優先使用字面量語法、善用 copy 防禦式程式設計、避免在快速枚舉中修改集合,即可規避 90% 的常見問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved