终于碰到iOS对象集合深拷贝的坑
从原始数组,拆分排列组合成新数组,同时给新的数组中的模型元素追加字段,数组的容量翻倍,如果不用深拷贝,后面追加的值就把前面的值覆盖了
UnitModel *model1 = [UnitModel new];
model1.studyPageId = @""; UnitModel *model2 = [UnitModel new];
model2.studyPageId = @"";
NSArray *modelArr = @[model1,model2];
// 直接调用mutableCopy 并没真的赋值全新的模型数组,需要model遵守NSCopy,NSMutableCopying协议,实现copyWithZone 才能copy出真正的数组
NSMutableArray <UnitModel *>*mutableModelArr = [modelArr mutableCopy];
#pragma mark - 对象深复制,M1TestArrayHelper copy处理
-(id)copyWithZone:(NSZone *)zone {
ImageModel *model = [[self class] allocWithZone:zone];
model.isResult = [_isResult copy];
model.image = [_image copy];
model.text = [_text copy];
model.bgmArr = [_bgmArr copy];
model.coverImageName = [_coverImageName copy];
model.coverCount = [_coverCount copy];
model.errorImageName = [_errorImageName copy];
model.errorImageCount = [_errorImageName copy];
return model;
} -(id)mutableCopyWithZone:(NSZone *)zone {
ImageModel *model = [[self class] allocWithZone:zone];
model.isResult = [_isResult copy];
model.image = [_image copy];
model.text = [_text copy];
model.bgmArr = [_bgmArr copy];
model.coverImageName = [_coverImageName copy];
model.coverCount = [_coverCount copy];
model.errorImageName = [_errorImageName copy];
model.errorImageCount = [_errorImageName copy];
return model;
}
// 这里显示原始数据结构
// 这里显示目标数据结构
终于碰到iOS对象集合深拷贝的坑的更多相关文章
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
copy与retain的区别: copy是创建一个新对象,retain是创建一个指针,引用对象计数加1.Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象 ...
- C#系列——记一次业务需求:对象的深拷贝
这篇随笔着实在意料之外,主要是源于上周开发BS的一个业务,需要用到对象的深拷贝.说的直白一点,就是将对象内存分配区和引用完全拷贝一份新的.这种需求以前就遇到过,怎么解决的已经记不清了.这次趁着这个机会 ...
- Pop–实现任意iOS对象的任意属性的动态变化
简介 Pop 是一个可扩展的动画引擎,可用于实现任意iOS对象的任意属性的动态变化,支持一般动画,弹性动画和渐变动画三种类型. 项目主页: pop 最新示例: 点击下载 注意: 官方代码中,并不包含实 ...
- 实现数组类(C++ 拷贝构造函数、拷贝函数)要判断赋值左右对象不相等,坑惨了
#include <iostream> using namespace std; class ArrayIndexOutOfBoundsException{ // 异常类 public: ...
- 再谈使用Emit把Datatable转换为对象集合(List<T>)
一.前因和存在的问题 前面我写了一篇<使用Emit把Datatable转换为对象集合(List<T>)>的博文,其实起源于我自己编写的一个orm工具(见前面几篇博文有介绍),里 ...
- 使用Emit把Datatable转换为对象集合(List<T>)
Emit生成动态方法部分摘自网上,但是经过修改,加入了对委托的缓存以及类结构的调整,使之调用更简洁方便.大致的思路是:要实现转换datatable到某个指定对象的集合,本质是实现转换一个datarow ...
- C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。
C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
转自:http://blog.csdn.net/zhao19861029/article/details/8473245 首先实现生成对应的JAVAbean的XML文件方法 /** * DMO4J写入 ...
- JSON转换类(二)--List转换成Json、对象集合转换Json等
#region List转换成Json /// <summary> /// List转换成Json /// </summary> public static string Li ...
随机推荐
- JAVA(六)数据库/网络编程/新IO
成鹏致远 | lcw.cnblog.com |2014-02-05 数据库 1.JDBC概述 JDBC(Java Database Connectivity,Java数据库连接)提供了一种与平台无关的 ...
- Asp.Net 隐藏手机号中间四位为*方法
需求:15088881234 > 150****1234 方法1: "; , ) + , ); 方法2: "; string p2= Regex.Replace(phone ...
- 11款最轻量级的CSS框架
日子一去不复返了HTML用于造型的网页.今天,CSS规则,很难想象没有它的任何网页设计.CSS在最近非常先进,用于创建复杂的Web设计和风格.那么,我们为什么要使用CSS框架?答案很简单.CSS框架主 ...
- MXNET:监督学习
线性回归 给定一个数据点集合 X 和对应的目标值 y,线性模型的目标就是找到一条使用向量 w 和位移 b 描述的线,来尽可能地近似每个样本X[i] 和 y[i]. 数学公式表示为\(\hat{y}=X ...
- Oracle11.2.0.4 RAC GI ORA-15003: diskgroup "XXXX" already mounted in another lock name space
最新文章:Virson‘s Blog 安装GI,在执行root.sh时报错: Disk Group CRSDG creation failed with the following message: ...
- Java8使用@sun.misc.Contended避免伪共享(False Sharing)
伪共享(False Sharing) Java8中用sun.misc.Contended避免伪共享(false sharing) Java8使用@sun.misc.Contended避免伪共享
- Java8学习笔记(六)--Optional
前言 身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的 ...
- Angular4学习笔记(二)-在WebStorm中启动项目
点击配置 创建 选择命令 package.json 运行 查看运行结果
- 缓存技术PK:选择Memcached还是Redis?
缓存技术PK:选择Memcached还是Redis? memcached完全剖析----------------->高质量文章 memcached的最佳实践方案 数据缓存系统-memcached ...
- 中文数据解码报错 UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence
UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence 失败原因: ...