首页 > 代码库 > 浅拷贝,深拷贝---ios

浅拷贝,深拷贝---ios

#import <Foundation/Foundation.h>@interface Father : NSObject <NSCopying,NSMutableCopying>@property (nonatomic,copy) NSString *name;@property (nonatomic,retain) NSNumber *age;-(id) initWithName:(NSString *)name withAge:(NSNumber *) age;@end

 

#import "Father.h"#import "Child.h"@implementation Father-(id) initWithName:(NSString *)name withAge:(NSNumber *) age{    self=[super init];    if(self!=nil){        _name=name;        _age=age;    }    return self;}//浅拷贝-(id) copyWithZone:(NSZone *)zone{    Father *father=[[[self class] allocWithZone:zone] init];    father.name=_name;    father.age=_age;    return father;}//深拷贝- (id)mutableCopyWithZone:(NSZone *)zone{    Father *father=[[[self class] allocWithZone:zone] init];    father.name=[_name mutableCopy];    father.age=[_age copy];    return self;}

 

 NSLog(@"-------自定义对象浅拷贝---------");        //浅拷贝学习        Father *father=[[Father alloc] initWithName:@"caitou" withAge:[NSNumber numberWithInt:23]];        Father *father2=[father copy];        NSLog(@"对象地址:%p",father);        NSLog(@"对象地址:%p",father2);        NSLog(@"对象属性地址name:%p",[father name]);        NSLog(@"对象属性地址name:%p",[father2 name]);        NSLog(@"对象属性地址age:%p",[father age]);        NSLog(@"对象属性地址age:%p",[father2 age]);                 NSLog(@"--------自定义对象深拷贝---------");        //深拷贝        Father *father4=[[Father alloc] initWithName:@"caitou" withAge:[NSNumber numberWithInt:25]];        Father *father3=[father4 mutableCopy];        NSLog(@"对象地址:%p",father4);        NSLog(@"对象地址:%p",father3);        NSLog(@"对象属性地址name:%p",[father4 name]);        NSLog(@"对象属性地址name:%p",[father3 name]);        NSLog(@"对象属性地址age:%p",[father4 age]);        NSLog(@"对象属性地址age:%p",[father3 age]);                NSLog(@"-------浅拷贝---------");        NSArray *array1=[[NSArray alloc] initWithObjects:@"sdf", nil];        NSArray *array2=[array1 copy];        NSLog(@"%p",array1);        NSLog(@"%p",array2);                NSLog(@"-------深拷贝---------");        NSMutableArray *mutableArray=[NSMutableArray arrayWithObject:@"sdfdf" ];        NSMutableArray *mutableArray2=[mutableArray mutableCopy];        NSLog(@"%p",mutableArray);        NSLog(@"%p",mutableArray2);        //总结:当copy一个不可变对象时,相当有retain,即引用记数加一,其他情况copy,mutablecopy都会分配空间复制内容