假设我执行以下操作:
CarObject *car1 = [CarObject new];
CarObject *car2 = [CarObject new];
NSArray *carObjectsList1 = @[car1, car2];
NSArray *carObjectsList2 = @[car1, car2];
还假设汽车对象实现了NSCoding协议。让我们说我存档和 取消归档:
//Archive
[NSKeyedArchiver archiveRootObject:carObjectsList1 toFile:@"list1.dat"];
[NSKeyedArchiver archiveRootObject:carObjectsList2 toFile:@"list2.dat"];
//Unarchive
NSArray *unarchivedList1 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"list1.dat"];
NSArray *unarchivedList2 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"list2.dat"];
然后假设我这样做:
CarObject *car1 = unarchivedList1 objectAtIndex:0];
car1.isTireFlat = true;
这样做会改变" Car1"在两个阵列?意思是,两个阵列的第一个汽车对象是否会有一个爆胎?参考链接是否仍然保留?有谁知道为什么答案是这样的(例如,它们如何保存/为什么它们不被保留?)
编辑:我已编辑了我的问题以提供更正确的示例。
答案 0 :(得分:2)
如果归档两个共享同一对象的阵列,则将该对象归档两次。然后,当您取消归档这两个数组时,您可以独立地将这些数组取消归档,就好像它们是不同的对象一样。由于每个unarchive都通过在NSCoding协议中调用initWithCoder来创建新的对象实例,因此在unarchiving时不会保留引用。
答案 1 :(得分:1)
是。 NSKeyedArchiver
甚至可以应对参考周期。