码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 深浅拷贝

时间:2015-12-23 17:50:04      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

-(void)copyDemo
{
//    在非集合类对象中:对immutable对象进行copy操作,是指针复制,mutableCopy操作时内容复制;对mutable对象进行copy和mutableCopy都是内容复制。用代码简单表示如下:
//    
//    [immutableObject copy] // 浅复制
//    [immutableObject mutableCopy] //深复制
//    [mutableObject copy] //深复制
//    [mutableObject mutableCopy] //深复制
    
//    在集合类对象中,对immutable对象进行copy,是指针复制,mutableCopy是内容复制;对mutable对象进行copy和mutableCopy都是内容复制。但是:集合对象的内容复制仅限于对象本身,对象元素仍然是指针复制。用代码简单表示如下:
//    
//    [immutableObject copy] // 浅复制
//    [immutableObject mutableCopy] //单层深复制
//    [mutableObject copy] //单层深复制
//    [mutableObject mutableCopy] //单层深复制
    
//    Baby *baby = [[Baby alloc] init]; //必须实现copy方法
//    baby.babyName = @"wei";
    
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithCapacity:10];
    [dic setObject:@"1" forKey:@"key1"];
    NSMutableArray *array1 = [[NSMutableArray alloc] initWithObjects:dic,dic, nil];
    NSMutableArray *array2 = [array1 mutableCopy];//单层深拷贝
    NSMutableArray *array3 = [[NSMutableArray alloc] initWithArray:array1 copyItems:YES];//里面dic变成不可变了
    NSMutableArray* array4 = [NSKeyedUnarchiver unarchiveObjectWithData:
                                  [NSKeyedArchiver archivedDataWithRootObject: array1]];//里面dic改变不影响其他数组(其与方法都会影响其他数组)
    [array2 removeObjectAtIndex:0];
    [[array4 objectAtIndex:0] setObject:@"3" forKey:@"key1"];
//    [[array4 objectAtIndex:1] setBabyName:@"8888"];
    
    DLog(@"%@ \n %@ \n %@ \n %@",array1,array2,array3,array4);
}

 

iOS 深浅拷贝

标签:

原文地址:http://www.cnblogs.com/weiboyuan/p/5070512.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!