概念性的东西我们不讲了,我们都知道集合类的拷贝比较特殊,对集合类进行
Deep Copy
其实并不是完整的深拷贝,只是拷贝了外面的容器,里面的指针并没有被拷贝。道理大家都懂,可平时用的少,前几天我就栽了个跟头,特此记录一下。
网上有现成的解决方案,特此解读
- 遍历字典中所有的键值对
- 如果还是字典,继续遍历轮询
- 不是字典,采取
mutableCopy
- 无法执行
Copy
的需要进行特殊处理,例如UIImage
-(NSMutableDictionary *)mutableDeepCopy
{
NSMutableDictionary *dict=[[NSMutableDictionary alloc] initWithCapacity:[self count]];
NSArray *keys=[self allKeys];
for(id key in keys)
{
id value=[self objectForKey:key];
id copyValue;
if ([value respondsToSelector:@selector(mutableDeepCopy)])
{
copyValue=[value mutableDeepCopy];
}
else if([value respondsToSelector:@selector(mutableCopy)])
{
if ([value isMemberOfClass:[UIImage class]])
{
continue;
}
copyValue=[value mutableCopy];
}
if(copyValue==nil)
{
copyValue=[value copy];
}
[dict setObject:copyValue forKey:key];
}
return dict;
}