您的位置:首页 > 其它

OC十八浅复制和深复制

2015-11-22 00:00 148 查看
//
//  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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: