iOS深拷贝与浅拷贝

518 阅读1分钟

首先,对象的拷贝涉及到两个方法copy和mutableCopy, 如果自定义的对象使用这个两个方法,首先需要遵守NSCopying、NSMutableCopying协议,并实现各自对应的方法copyWithZone:和mutableCopyWithZone:通过运行时的源码NSObject.mm中,可以了解到两者的实现如下:

+ (id)copyWithZone:(struct _NSZone *)zone {
    return (id)self;
}

- (id)copy {
    return [(id)self copyWithZone:nil];
}

+ (id)mutableCopyWithZone:(struct _NSZone *)zone {
    return (id)self;
}

- (id)mutableCopy {
    return [(id)self mutableCopyWithZone:nil];
}

copy和mutableCopy两个方法只是简单的调用了copyWithZone:和mutableCopyWithZone:
两者的区别

1、copy方法用于复制对象的副本。通常来说,copy方法总是返回对象的不可修改的副本,即使对象本身是可修改的。例如,NSMutableString调用copy方法,将会返回不可修改的字符串对象。
2、mutableCopy方法用于复制对象的可变副本。通常来说,mutableCopy方法总是返回对象可修改的副本,即使被复制的对象本身是不可修改的。

图片.png