iOS NSMutableArray使用addObject:方法时数据被覆盖

项目中做图片上传时,遇到了这个问题,NSMutableArray使用addObject:方法时数据被覆盖。

[self.imagesArray addObject:self.result]; 

上传图片流程是这样的,和以往做过的项目流程不太一样,图片以二进制格式一张一张进行上传,然后后台会返回给你图片的 url,最后再将图片的 url 进行上传用来展示。流程说完,解释 self.result是一个全局的可变字典,但是可能有时候有的图片上传速度过快就会覆盖前面的数据,这就很头疼了,图片出现重复,最后看了一个大佬的文章发现和我遇到的情况一样,看了一下果然解决了,将

 [self.imagesArray addObject:self.result]

改成

 [self.imagesArray addObject:[self.result  mutableCopy]];

正如大佬的文章解释一样,对于集合对象,对于不可变的集合对象,copy 是浅拷贝,mutableCopy 是单层深拷贝。
对于可变的集合对象,无论 copy 或者 mutableCopy 都是单层深拷贝。
值得注意的是
copy需要实现NSCopying协议,然后实现以下方法,否则copy会crash
mutableCopy时,需要实现NSMutableCopying协议,否则mutableCopy会crash。
好了遇到问题解决就好,记录一下。希望对大家也有所帮助吧!果然底层还是有很大所用的,如果不理解 copy 和 mutableCopy 的话估计也就卡在这了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容