// 字面量語法(現代推薦,不可變)
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 *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% 使用場景。注意鍵複製語義與線程安全邊界。