创建一个NSDictionary对象,随便往里面添加内容,然后通过代码产生可变和不可变副本,这些复制是深复制还是浅复制?(Objective-C)
- #import <Foundation/Foundation.h>
- int main(int argc, const char * argv[]) {
- @autoreleasepool {
- //创建多组键值对的字典
- NSDictionary *dict = [NSDictionary dictionaryWithObject:@"张三" forKey:@"zs"];
- //遍历字典
- [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
- NSLog(@"dict %@ = %@",key,obj);
- }];
- NSLog(@"%p",dict);//dict字典地址
-
-
- NSMutableDictionary *dict1 = [dict copy];//产生不可变副本
- // [dict1 setObject:@"李四" forKey:@"zs"]; //无法修改
- // 遍历字典
- [dict1 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
- NSLog(@"dict %@ = %@",key,obj);
- }];
- NSLog(@"%p",dict1);//dict1字典地址 = dict字典地址
-
- //dict1字典地址 = dict字典地址,且内容不可变,由以上信息得出结论:没有产生新对象,copy是浅复制。
-
-
-
-
- NSMutableDictionary *dict2 = [dict mutableCopy];//产生可变副本
-
- [dict2 setObject:@"李四" forKey:@"zs"];//修改Value值
- // 遍历字典
- [dict2 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
- NSLog(@"dict %@ = %@",key,obj);
- }];
- NSLog(@"%p",dict2);//dict2字典地址!=dict字典地址
-
- //dict1字典地址 != dict字典地址,内容可变,由以上信息得出结论:产生了新对象,mutablecopy是深复制。
- }
- return 0;
- }
复制代码 |
|