Objective-c 的Immutable copy 和 Deep copy.

每一种语言里都有浅拷贝和深拷贝,Objective-c语言的深浅两种拷贝的区别就在于你对-(id)copyWithZone:(NSZone *)zone实现的区别.

 

 1.浅复制与深复制概念
⑴浅复制(浅克隆)
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

⑵深复制(深克隆)
被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。


浅拷贝

 

#import <Foundation/Foundation.h>#import "Person.h"@implementation Person-(id)initWithName:(NSString *)theName{if ([super init]){[self setName:theName];}return self;}-(void)setName:(NSString *) theName{name = theName;}-(NSString *) name{return name;}-(id)copyWithZone:(NSZone *)zone{//Person *aPerson = [[[self class] allocWithZone:zone] initWithName:[self name]];//return aPerson;return self;}-(void)dealloc{[name release];[super dealloc];}@end; 

 

深拷贝

 

#import <Foundation/Foundation.h>#import "Person.h"@implementation Person-(id)initWithName:(NSString *)theName{if ([super init]){[self setName:theName];}return self;}-(void)setName:(NSString *) theName{name = theName;}-(NSString *) name{return name;}-(id)copyWithZone:(NSZone *)zone{Person *aPerson = [[[self class] allocWithZone:zone] initWithName:[self name]];return aPerson;}-(void)dealloc{[name release];[super dealloc];}@end; 

你可能感兴趣的:(Objective-c 的Immutable copy 和 Deep copy.)