iOS 深浅拷贝

-(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 深浅拷贝)