self.arr = [NSMutableArray new];
self.dic = [NSMutableDictionary new];
[self.arr addObjectsFromArray:@[@"1",@"2",@"3"]];
[self.dic setObject:self.arr forKey:@"key1"];
[self.arr removeAllObjects];
[self.arr addObjectsFromArray:@[@"3",@"4",@"5"]];
[self.dic setObject:self.arr forKey:@"key2"];
// 輸出:key1 和 key2 都指向同一個數組對象,內容均為 3,4,5
**字典存儲的是對象引用(指針)**,而非值拷貝。`key1` 和 `key2` 指向同一個 `NSMutableArray` 實例。後續修改數組內容,**兩個鍵觀察到的都是同一份內存**。
[self.dic setObject:[self.arr copy] forKey:@"key1"]; // copy 生成 NSArray (不可變)
[self.arr removeAllObjects];
[self.arr addObjectsFromArray:@[@"3",@"4",@"5"]];
[self.dic setObject:[self.arr copy] forKey:@"key2"];
self.arr = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];
[self.dic setObject:self.arr forKey:@"key1"];
self.arr = [NSMutableArray arrayWithObjects:@"3",@"4",@"5", nil]; // 重新賦值新對象
[self.dic setObject:self.arr forKey:@"key2"];
理解「引用 vs 值」與「copy 語義」,是 iOS 開發避免數據竄改的基石。