OC十八浅复制和深复制

//
//  ViewController.m
//  18章复制对象
//
//  Created by Zoujie on 15/11/21.
//  Copyright © 2015年 Zoujie. All rights reserved.
//

#import "ViewController.h"
#import "Book.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
#pragma  mark copy and mutableCopy method
    [self copyAndMutableCopy];
#pragma mark 浅复制与深复制
    [self copyAnddeepCopy];
    
    [self DictionaryDemo];
}


-(void)copyAndMutableCopy
{
//    NSArray *array = @[@"one",@"two",@"three",@"four"];
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"one",@"two",@"three",@"four", nil];
    NSMutableArray *dataArray;
    NSMutableArray *dataArray2;
    
    //一般赋值
//    dataArray = [NSMutableArray arrayWithArray:array];
    dataArray = array;
    [dataArray removeObjectAtIndex:0];

    NSLog(@"dataArray===%@,array===%@,%p,%p",dataArray,array,dataArray,array);
    NSLog(@"%p,%p",[dataArray objectAtIndex:0],[array objectAtIndex:0]);// 打印内存地址
    
    //复制一份,然后删除副本第一个元素
    dataArray2 = [array mutableCopy];
    
    [dataArray2 removeObjectAtIndex:0];
     NSLog(@"dataArray===%@,array===%@",dataArray2,array);
}

-(void)copyAnddeepCopy
{
    NSMutableArray *dataArray = [NSMutableArray arrayWithObjects:[NSMutableString stringWithString:@"one"],[NSMutableString stringWithString:@"two"],[NSMutableString stringWithString:@"three"], nil];
    NSMutableArray *dataArray2;
    NSMutableString *mStr;
    
    NSLog(@"dataArray: ");
    for (NSString *elem in dataArray)
        NSLog(@"  %@",elem);
    
//    复制一份,然后删除副本的一个元素
    dataArray2 = [dataArray mutableCopy];
    mStr = dataArray[0];
    [mStr appendString:@"ONE"];
    //原始数组第一个元素也没修改了
    //浅复制仅将数组元素的引用复制到了另一个数组元素
    NSLog(@"dataArray: ");
    for (NSString *elem in dataArray)
        NSLog(@"  %@",elem);
    
    NSLog(@"dataArray2: ");
    for (NSString *elem in dataArray2)
        NSLog(@"  %@",elem);
    //若要为数组中的每个元素创建完全不同的副本,需要执行深复制
    
//    Book *book = [[Book alloc]init];
//    Book *newbook;
//    newbook = [book mutableCopy];
//    想要实现自己创建的类的复制,需要实现nscoping协议的方法
}


-(id)copyWithZone:(NSZone *)zone
{
    //    Fraction *newFraction = [[Fraction allocWithZone:zone]init];
    //
    ////    [newFraction set]
    return  nil;
}


-(void)DictionaryDemo
{
    NSDictionary *dicDemo = [[NSDictionary alloc]init];
    dicDemo = @{@"firstName":@"zou",@"Seconde":@"Jie",@"age":@"28"};
    
    NSMutableDictionary *dicCopy;
    dicCopy = [dicDemo copy];
    NSLog(@"dicCopy=======================================================%@",dicCopy);
    NSLog(@"dicDemo=======================================================%@",dicDemo);
    
//    [dicCopy removeObjectForKey:@"firstName"];
//    

//    
}


@end


你可能感兴趣的:(OC十八浅复制和深复制)