penn-wang
一位老和尚,他身边聚拢着一帮虔诚的弟子。这一天,他嘱咐弟子每人去南山打一担柴回来。弟子们匆匆行至离山不远的河边,人人目瞪口呆。只见洪水从山上奔泻而下,无论如何也休想渡河打柴了。无功而返,弟子们都有些垂头丧气。唯独一个小和尚与师傅坦然相对。师傅问其故,小和尚从怀中掏出一个苹果,递给师傅说,过不了河,打不了柴,见河边有棵苹果树,我就顺手把树上唯一的一个苹果摘来了。后来,这位小和尚成了师傅的衣钵传人。

比如,我自定义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后的 成员变量内存地址为两份。

posted on 2012-12-26 11:36  penn-wang  阅读(145)  评论(0编辑  收藏  举报