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

Objective-C NSDictionary 完整操作指南

     編輯:關於C++

創建與初始化

// 字面量語法(現代推薦,不可變)
NSDictionary *dict = @{@"key1": @"value1", @"key2": @"value2"};
// 類方法
NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:
                       @"v1", @"k1", @"v2", @"k2", nil];
// 從可變字典複製
NSMutableDictionary *mdict = [NSMutableDictionary dictionary];
[mdict setObject:@"v" forKey:@"k"];
NSDictionary *immutable = [mdict copy];

查詢與訪問

id value = dict[@"key1"];              // 現代語法,鍵不存在返回 nil
id value = [dict objectForKey:@"key1"]; // 等價
NSArray *keys = [dict allKeys];         // 所有鍵
NSArray *values = [dict allValues];     // 所有值
NSUInteger count = dict.count;          // 鍵值對數量
BOOL hasKey = [dict objectForKey:@"key"] != nil;

巢狀訪問

NSDictionary *nested = @{@"user": @{@"name": @"John", @"age": @25}};
NSString *name = nested[@"user"][@"name"]; // 鏈式下標
// 等價於
NSString *name = [[nested objectForKey:@"user"] objectForKey:@"name"];

遍歷

// 快速枚舉(推薦)
for (NSString *key in dict) {
    NSLog(@"%@ -> %@", key, dict[key]);
}
// 也可枚舉值
for (id value in dict) { ... }

可變字典 NSMutableDictionary

NSMutableDictionary *md = [NSMutableDictionary dictionary];
[md setObject:@"new" forKey:@"key"];      // 增/改
[md removeObjectForKey:@"key"];           // 刪除指定
[md removeAllObjects];                    // 清空
// 批量操作
[md addEntriesFromDictionary:anotherDict];

內存與線程安全

  • 鍵會被 複製(需遵循 NSCopying),值被 強引用。
  • NSDictionary 線程安全(不可變),NSMutableDictionary 非線程安全。
  • 多線程環境下用 @synchronized 或併發隊列保護可變字典。

完整示例

int main() {
    @autoreleasepool {
        NSDictionary *dic = @{@"k1": @"v1", @"k2": @[@"arr1", @"arr2"], @"k3": @{@"sub": @"val"}};
        NSLog(@"字典: %@", dic);
        NSLog(@"k2 第一個元素: %@", dic[@"k2"][0]);
        NSLog(@"k3.sub: %@", dic[@"k3"][@"sub"]);
        for (NSString *k in dic) NSLog(@"%@: %@", k, dic[k]);
    }
    return 0;
}

總結

NSDictionary 是鍵值存儲核心類。掌握 字面量創建、下標訪問、快速枚舉、巢狀鏈式取值、可變/不可變轉換,覆蓋 95% 使用場景。注意鍵複製語義與線程安全邊界。

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