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 的话估计也就卡在这了。

你可能感兴趣的:(iOS NSMutableArray使用addObject:方法时数据被覆盖)