iOS 创建的对象修改了之前的数据(深拷贝问题)

2023-11-20  本文已影响0人  XieHenry

使用场景:
我有一个HomeModle的对象 self.model。现在需要 创建一个新的HomeModle,并且他的值和self.model一样,但是只需要修改其中的一个价格。

刚开始我使用的

    HomeModle *tempModel = self.model;
    tempModel.price = @"100";

最后测试发现修改了self.model的数据。是因为不是深拷贝的问题。需要对HomeModle进行<NSCopying> 协议,并在.m文件里实现协议方法

@interface HomeModle : NSObject <NSCopying>
- (id)copyWithZone:(NSZone *)zone {
    HomeModle *copy = [[[self class] allocWithZone:zone] init];
    if (copy) {
        // 在这里复制其他属性
        copy.price = self.price;
        copy.xxx = self.xxx;
    }
    return copy;
}

实现这些方法之后,就可以正常使用了

HomeModle *tempModel = [self.model copy];
tempModel.price = @"100";

之前好多基础的东西,自己掌握的不好,总是遇到了才了解,😄😄😄

上一篇 下一篇

猜你喜欢

热点阅读