iOS对自定义对象深拷贝

开发中会遇到控制器A传递model到控制器B的情况,但是如果直接赋值的话,控制器B更改了model数据,控制器Amodel数据也会改变.因为控制器A和B操作的model实质上是同一块内存地址


相同的地址

要避免这种情况赋值时就要对model对象进行深拷贝.也就是新开辟一个内存地址,再复制一份内容.

首先要你要给你需要深拷贝的自定义对象遵守NSCopying,NSMutableCopying协议,不然当DemoModel对象执行copy和mutableCopy时会崩溃

.h文件中

@interface DemoModel : NSObject<NSCopying,NSMutableCopying>

@property (nonatomic,assign) NSInteger age;

@property (nonatomic,  copy) NSString * name;

.m文件中 实现copyWithZone mutableCopyWithZone 方法

- (id)copyWithZone:(NSZone *)zone{

DemoModel * model = [[DemoModel allocWithZone:zone] init];

model.age = self.age;//self是被copy的对象

model.name = self.name;

return model;

}

- (id)mutableCopyWithZone:(NSZone *)zone{

DemoModel * model = [[DemoModel allocWithZone:zone] init];

model.age = self.age;//self是被copy的对象

model.name = self.name;

return model;

}

这样我们赋值时需要深拷贝的对象调用copy或mutableCopy方法就会跳转到我们上面实现的copyWithZone或mutableCopyWithZone对对象进行了深拷贝.我们打印地址会发现地址已经改变了.

地址改变了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容