//转载自:http://www.cnblogs.com/tekkaman/p/3664315.html
NSObject实现了-copy、+copy、+copyWithZone方法。代码如下:
+ (id)copy {
return (id)self;
}
+ (id)copyWithZone:(NSZone *)zone {
return (id)self;
}
- (id)copy {
return [(id)self copyWithZone:NULL];
}
其中,+copy、+copyWithZone的存在是为类对象(class obj)服务,以便让类对象能够被插入到容器中。又因为类对象全局只能存在一份,所以+copy、+copyWithZone方法只是简单返回self。
对于-copy,此方法存在的意义只是为了方便,里面会直接把-copyWithZone的方法返回。但是NSObject并没有实现-copyWithZone,需要子对象去实现NSCopying协议(即实现-copyWithZone方法)。
最后NSZone这玩艺儿已经被Apple抛弃,所以NSObject的copy方法中只是传入NULL。
那么,在实际开发中该如何实现-copyWithZone方法?
1)对于祖先链上无-copyWithZone方法的情况,本类直接用 alloc来实现。
2)对于祖先链上有-copyWithZone方法的情况,先调用[super copyWithZone],再用返回的指针对本类的独有数据进行copy。
3)对于immutable对象,仅仅对本对象retain使得引用计数加1即可。

浙公网安备 33010602011771号