我想了解一下Apple文档中用于深度复制字典Here数组的示例。
清单3中的真实深层副本
该示例显示
NSArray* trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:oldArray]];
请注意,没有副本,可变副本或自动释放运算符,因此我在努力理解这是一个副本以及如何释放它。实际上,如果我发布实现,它将崩溃。但是,它确实按预期工作,并且如示例所示,使用它似乎没有任何废弃的内存。
我查看了NSUnarchiver类参考,并提到了unarchiveObjectWithData方法创建了对象的临时副本?
这是否意味着正确的实现就是分配并初始化新数组,而不是仅仅分配指针以便释放它?
提前致谢。
最佳答案
他们通过对对象图进行完整的归档传递来进行深层复制。使用NSArchiver可以实现自动循环引用管理之类的功能,并且对象可以选择不对诸如其委托之类的内容进行编码,或者可以将内容挂在反存档上。
出于所有目的和目的,它是通过将某些内容保存到磁盘然后作为新文档读回来进行存档。仅代替磁盘,它一直都存储在内存中。
它很慢,非常昂贵,并且完全不适合任何事物,但是偶尔需要完全复制一个复杂的对象图时。unarchiveObjectWithData:
返回一个自动释放的对象。如果使用MRC,则需要保留它。但是,更好的解决方案是迁移到ARC。
关于objective-c - cocoa 深拷贝容器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34078545/