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

Objective-C 集合類速覽:NSArray、NSSet、NSDictionary 及可變版本核心用法

     編輯:關於C語言

Objective-C 集合類速覽:NSArray、NSSet、NSDictionary 及可變版本核心用法

Foundation 框架提供三大核心集合類,各有不可變/可變對。本文速覽創建、增刪改查、訪問語法、線程安全特性與典型應用場景。

一、三大集合對比表

二、不可變 vs 可變

  • 不可變(NSArray、NSSet、NSDictionary):創建時初始化,之後不可修改,線程安全(只讀)。
  • 可變(NSMutableArray 等):運行時動態增刪,非線程安全,需自行同步。

三、核心 API 速查

1. NSMutableArray

NSMutableArray *arr = [NSMutableArray array];
[arr addObject:@"good"];           // 尾部添加
[arr removeObject:@"good"];        // 刪除所有匹配項
id obj = arr[index];               // 現代下標訪問(等價 objectAtIndex:)

2. NSSet

NSSet *set = [NSSet setWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
NSString *random = [set anyObject]; // 隨機取一個元素(擲骰子)
// 無下標訪問,需遍歷或轉數組

3. NSMutableDictionary

NSMutableDictionary *dict = [@{@"name": @"lili"} mutableCopy];
[dict setObject:@"rose" forKey:@"name"];      // 覆蓋同 key 值
[dict setObject:@"北京" forKey:@"address"];   // 新增鍵值對
// [dict removeObjectForKey:@"name"];          // 刪除
id value = dict[@"name"];                     // 現代下標訪問

四、共同限制

  • 只能存放 Objective-C 對象(id 類型)。
  • 基本數據類型需包裝:@(123)、[NSNumber numberWithInt:123]。
  • nil 不能作為元素/值存入(作為列表結束標記)。

五、線程安全提示

  • 不可變集合天生線程安全(只讀)。
  • 可變集合非線程安全,多線程環境需加鎖(@synchronized、NSLock、GCD 隊列串行化)或使用第三方線程安全容器。

六、現代語法糖

// 字面量創建(編譯器自動轉調用對應構造方法)
NSArray *arr = @[@"a", @"b", @"c"];
NSDictionary *dict = @{@"key": @"value"};
NSSet *set = @[@"a", @"b", @"c"]; // 實際調用 +setWithObjects:count:

七、總結

根據「是否需要順序」「是否需要 Key-Value」「是否需要去重」「是否需要動態修改」四個維度選擇集合類。現代開發優先使用字面量語法創建不可變集合,再按需 mutableCopy 轉可變,代碼更簡潔安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類別有序性鍵值結構元素唯一性典型用途
NSArray / NSMutableArray✅ 有序❌ 索引❌ 可重複有序列表、棧、隊列
NSSet / NSMutableSet❌ 無序❌ 無✅ 唯一去重、集合運算、快速查找
NSDictionary / NSMutableDictionary❌ 無序✅ Key-ValueKey 唯一,Value 可重複映射表、配置、緩存