黑马程序员技术交流社区
标题:
入学测试题6
[打印本页]
作者:
泥娃娃
时间:
2016-3-19 14:10
标题:
入学测试题6
创建一个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;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2