我想了解一下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/

10-11 22:29