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

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

作者: XieHenry | 来源:发表于2023-11-20 20:29 被阅读0次

使用场景:
我有一个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";

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

相关文章

  • 原型模式

    一、 原型模式 原型模式:用原型实指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 涉及浅拷贝与深拷贝问题。...

  • JS的深拷贝和浅拷贝

    浅拷贝 重新再堆中创建内存,拷贝前后对象的基本数据类型互不影响 只拷贝一层,不能对对象中的子对象进行拷贝 深拷贝 ...

  • iOS 对象的深拷贝浅拷贝的问题 copy mutableCop

    记录一个比较坑爹的初级问题 关于iOS 对象的深拷贝浅拷贝的问题 copy和mutableCopy

  • Python-Shallow Copy&Deep Cop

    浅拷贝和深拷贝的区别: 浅拷贝:创建一个新的组合对象,这个新对象与原对象共享内存中的子对象。深拷贝:创建一个新的组...

  • iOS 简单理解---浅拷贝,深拷贝

    浅拷贝,深拷贝。 1、个人简单理解就是: 浅拷贝没有创建新对象,深拷贝创建新的对象 从输出结果可以看出:1:不管是...

  • 原型模式

    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,注意深拷贝和浅拷贝

  • java 深拷贝和浅拷贝

    浅拷贝: 不额外创建子对象,只是把子对象的引用拷贝过去深拷贝: 创建新的子对象并拷贝属性 如果把java bean...

  • 深浅拷贝 对象

    先定义一个对象 一、浅拷贝 结果:原对象和拷贝后的对象都被修改了! 二、深拷贝 结果:拷贝后的原对象没有被修改,而...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • 浅拷贝和深拷贝

    浅拷贝 如果对象中的属性是引用类型的值,那么存在数据共享问题,修改某个对象会对拷贝的对象产生影响 深拷贝 如果对象...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/aknvwdtx.html