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

Objective-C NSArray 不可變數組完整指南:創建、訪問、遍歷與擴展

     編輯:關於C語言

Objective-C 基礎:NSArray 不可變數組核心用法

NSArray 是 Foundation 框架中最基礎的集合類,提供有序、不可變的對象存儲。本文通過完整控制台示例,演示創建、訪問、遍歷三種方式、動態擴展生成新數組,並對比 Java 集合框架差異。

完整可運行示例代碼

// main.m
#import 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 1. 類方法創建不可變數組 (以 nil 結尾)
        NSArray *array = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
        
        // 2. 兩種訪問方式
        NSLog(@"The first element is %@", array[0]);           // 下標語法 (現代)
        NSLog(@"The second element is %@", [array objectAtIndex:1]); // 消息語法 (傳統)
        
        // 3. 不可變數組「擴展」:實際返回新數組
        NSArray *newArray = [array arrayByAddingObject:@"D"];
        
        // 4. 三種遍歷方式對比
        NSLog(@"=== for 索引遍歷 ===");
        for (int i = 0; i < newArray.count; i++) {
            NSLog(@"The %d element is %@", i, newArray[i]);
        }
        
        NSLog(@"=== NSEnumerator 遍歷 ===");
        NSEnumerator *enumerator = [newArray objectEnumerator];
        id obj;
        while (obj = [enumerator nextObject]) {
            NSLog(@"The element is %@", obj);
        }
        
        NSLog(@"=== 快速枚舉 (推薦) ===");
        for (id element in newArray) {
            NSLog(@"The element is %@", element);
        }
    }
    return 0;
}

程序輸出結果

The first element is A
The second element is B
The 0 element is A
The 1 element is B
The 2 element is C
The 3 element is D
The element is A
The element is B
The element is C
The element is D
The element is A
The element is B
The element is C
The element is D

核心知識點總結

1. 不可變性本質

  • NSArray 一旦創建,**內容、長度、順序均不可改變**
  • 類似 Java 的 String 或 List.of() 返回的不可變列表
  • 「修改」操作(如 arrayByAddingObject:)實際返回**新實例**

2. 三種遍歷方式對比

3. 與 Java 集合框架關鍵差異

方式語法優點缺點
索引 for 循環for(int i=0; i可控制索引、支持逆序、隨機訪問代碼較繁瑣
NSEnumeratorNSEnumerator *e = [arr objectEnumerator]; while(obj=[e nextObject])早期 API、支持反向 reverseObjectEnumerator較繁瑣、需手動管理枚舉器
快速枚舉for(id obj in arr)語法最簡潔、性能最優、編譯器優化、防越界需 C99 / Objective-C 2.0+ 支持
特性Objective-CJava
默認數組類NSArray **不可變**ArrayList **可變**
可變對應類NSMutableArrayArrayList (默認即可變)
不可變獲取默認即不可變Collections.unmodifiableList() 或 Guava ImmutableList
設計哲學**默認安全**,顯式選擇可變**默認靈活**,顯式選擇不可變

進階提示

  • 現代字面量語法:NSArray *arr = @[@"A", @"B", @"C"]; (自動補 nil,更簡潔)
  • 類型安全:配合泛型 NSArray * (Xcode 7+),編譯期檢查元素類型
  • 性能特徵:NSArray 底層優化為 __NSArrayI (不可變) / __NSArrayM (可變),隨機訪問 O(1),記憶體連續
  • 線程安全:NSArray 不可變天然線程安全;NSMutableArray 非線程安全,多線程需加鎖或用 dispatch_queue 序列化

掌握 NSArray 的不可變語義與三種遍歷模式,是 Objective-C 開發的入門必修課。現代代碼請優先使用 @[] 字面量與 for-in 快速枚舉,編寫更安全、可讀、高效的集合處理代碼。

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