深复制和浅复制

//
//  main.m
//  深复制和浅复制。
//
//  Created by yaomars on 16/4/27.
//  Copyright © 2016年 yaomars. All rights reserved.
//

#import <Foundation/Foundation.h>

//创建一个NSDictionary,并创建可变副本和不可变副本,说下是深复制还是浅复制。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
//**************************第一步:创建NSDictionary字典**************************
//      第一种方式: 创建一个NSDictionary
        NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"value1" forKey:@"key1"];
//      第二种方式: 创建一个NSDictionary
        NSDictionary *dict2 = @{@"key2":@"value2",@"key3":@"value3"};
//      第三种方式:创建一个NSDictionary
        NSArray *keyArray = @[@"key4",@"key5"];
        NSArray *valueArray = @[@"value4",@"value5"];
        
        NSDictionary *dict3 = [NSDictionary dictionaryWithObjects:valueArray forKeys:keyArray];
        
        
//**************************第二步:创建可变副本和不可变副本**************************
        NSDictionary *ncDict1 = [dict1 copy];  //不可变副本
        NSDictionary *ncDict2 = [dict2 copy];  //不可变副本
        NSDictionary *ncDict3 = [dict3 copy];  //不可变副本
        
        NSMutableDictionary *mDict1 = [dict1 mutableCopy];  //可变副本
        NSMutableDictionary *mDict2 = [dict2 mutableCopy];  //可变副本
        NSMutableDictionary *mDict3 = [dict3 mutableCopy];  //可变副本
      
//**************************第三步:测试可变副本能否增加键值对**************************
        NSLog(@"旧的 mDict1 = %@",mDict1);
        NSLog(@"旧的 mDict2 = %@",mDict2);
        NSLog(@"旧的 mDict3 = %@",mDict3);

        
        [mDict1 setObject:@"value6" forKey:@"key6"];    //深复制产生的可变副本可以增加键值对
        [mDict2 setObject:@"value6" forKey:@"key6"];    //深复制产生的可变副本可以增加键值对
        [mDict3 setObject:@"value6" forKey:@"key6"];    //深复制产生的可变副本可以增加键值对

        
        NSLog(@"新的 mDict1 = %@",mDict1);
        NSLog(@"新的 mDict2 = %@",mDict2);
        NSLog(@"新的 mDict3 = %@",mDict3);


        
//**************************第四步:测试不可变副本能否增加键值对**************************
        NSLog(@"旧的 ncDict1 = %@",ncDict1);
        NSLog(@"旧的 ncDict2 = %@",ncDict2);
        NSLog(@"旧的 ncDict3 = %@",ncDict3);
        
//        [ncDict1 setValue:@"value6" forKey:@"key6"];  //浅复制产生的不可变副本不可增加键值对,运行时会报错
//        [ncDict1 setValue:@"value6" forKey:@"key6"];  //浅复制产生的不可变副本不可增加键值对,运行时会报错
//        [ncDict1 setValue:@"value6" forKey:@"key6"];  //浅复制产生的不可变副本不可增加键值对,运行时会报错
        
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值