比如,我自定义someData;
@interface someData : NSObject<NSCopying> { NSString *_aStr; UIColor *_aColor; } @property (nonatomic, copy) NSString *aStr; @property (nonatomic, retain) UIColor *aColor; @end //// @implementation someData @synthesize aStr = _aStr; @synthesize aColor = _aColor; -(void) dealloc { [_aColor release]; [_aStr release]; [super dealloc]; } - (id)copyWithZone:(NSZone *)zone { someData *copy = [[[self class] allocWithZone:zone] init]; [copy setAStr:_aStr];//调用setter,_aStr 拷贝 到 copy [copy setAColor:[UIColor colorWithCGColor:[_aColor CGColor]]];//生成一分新的color ,与_aColor地址不同 return copy; } @end
实现 nscopying协议,实现copywithzone方法。
要注意:你是copy,所以,someData里面的成员变量, 其 成员变量 都应该保证有两份深拷贝,也就是 copy后的 成员变量内存地址为两份。