深复制和浅复制(二)

来源:互联网 发布:windows 10 dpi 编辑:程序博客网 时间:2024/06/04 19:25

////  main.m//  深复制和浅复制(二)////  Created by yaomars on 16/4/27.//  Copyright © 2016年 yaomars. All rights reserved.//#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {    @autoreleasepool {       //**************************第一步:创建NSMutableDictionary字典**************************        //      第一种方式: 创建一个NSMutableDictionary        NSMutableDictionary *dictM1 = [NSMutableDictionary dictionary];  //创建一个空的可变字典        //      第二种方式: 创建一个NSMutableDictionary        NSMutableDictionary *dictM2 = [NSMutableDictionary dictionaryWithObject:@"value1" forKey:@"key1"];        //      第三种方式: 创建一个NSMutableDictionary        NSMutableDictionary *dictM3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value2",@"key2",@"value3",@"key3", nil];                //      第四种方式: 创建一个NSMutableDictionary        NSArray *keysArray = @[@"key4",@"key5"];        NSArray *valuesArray = @[@"value4",@"key5"];        NSMutableDictionary *dictM4 = [NSMutableDictionary dictionaryWithObjects:valuesArray forKeys:keysArray];        //      第五种方式: 创建一个NSMutableDictionary//        NSMutableDictionary *dictM5 = @{@"key6":@"value6",@"key7":@"value7"}; //特别注意可变字典不可以用这种方式赋值          //**************************第二步:创建可变副本和不可变副本**********************************        NSDictionary *ncDict1 = [dictM1 copy];  //不可变副本        NSDictionary *ncDict2 = [dictM2 copy];  //不可变副本        NSDictionary *ncDict3 = [dictM3 copy];  //不可变副本        NSDictionary *ncDict4 = [dictM4 copy];  //不可变副本                NSMutableDictionary *mDict1 = [dictM1 mutableCopy];  //可变副本        NSMutableDictionary *mDict2 = [dictM2 mutableCopy];  //可变副本        NSMutableDictionary *mDict3 = [dictM3 mutableCopy];  //可变副本        NSMutableDictionary *mDict4 = [dictM4 mutableCopy];  //可变副本          //**************************第三步:测试可变副本能否增加键值对*********************************        NSLog(@"旧的 mDict1 = %@",mDict1);        NSLog(@"旧的 mDict2 = %@",mDict2);        NSLog(@"旧的 mDict3 = %@",mDict3);        NSLog(@"旧的 mDict4 = %@",mDict4);                        [mDict1 setObject:@"value6" forKey:@"key6"];    //深复制产生的可变副本可以增加键值对        [mDict2 setObject:@"value6" forKey:@"key6"];    //深复制产生的可变副本可以增加键值对        [mDict3 setObject:@"value6" forKey:@"key6"];    //深复制产生的可变副本可以增加键值对        [mDict4 setObject:@"value6" forKey:@"key6"];    //深复制产生的可变副本可以增加键值对                NSLog(@"新的 mDict1 = %@",mDict1);        NSLog(@"新的 mDict2 = %@",mDict2);        NSLog(@"新的 mDict3 = %@",mDict3);        NSLog(@"新的 mDict4 = %@",mDict4);                        //**************************第四步:测试不可变副本能否增加键值对*********************************        NSLog(@"旧的 ncDict1 = %@",ncDict1);        NSLog(@"旧的 ncDict2 = %@",ncDict2);        NSLog(@"旧的 ncDict3 = %@",ncDict3);        NSLog(@"旧的 ncDict4 = %@",ncDict4);        //        [ncDict1 setValue:@"value6" forKey:@"key6"];  //浅复制产生的不可变副本不可增加键值对,运行时会报错//        [ncDict1 setValue:@"value6" forKey:@"key6"];  //浅复制产生的不可变副本不可增加键值对,运行时会报错//        [ncDict1 setValue:@"value6" forKey:@"key6"];  //浅复制产生的不可变副本不可增加键值对,运行时会报错                  }    return 0;}


0 0
原创粉丝点击