【发布时间】:2014-08-11 02:24:19
【问题描述】:
假设我执行以下操作:
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”的属性吗?意思是,这两个阵列的第一个汽车对象是否会漏气?参考链接是否仍然保留?有谁知道为什么会这样(例如,它们是如何保存的/为什么不保存?)
编辑:我已经编辑了我的问题以提供更正确的示例。
【问题讨论】:
-
我想指出,我自己也尝试过,但两次都得到了不同的结果。不过,我可能做错了什么。
-
[unarchivedList1 objectAtIndex:0] = nil;行不执行任何操作。你打算用那条线做什么? -
为什么不记录两个未归档的数组,看看对象指针是什么。这两个数组不太可能共享相同的两个对象。
-
谢谢。我确认它们不是同一个对象。即使两个数组共享同一个对象,它们也会将同一个对象写入磁盘两次,位于不同的文件位置。
-
这个问题很困惑。如前所述,
[unarchivedList1 objectAtIndex:0] = nil无效且毫无意义。除此之外,数组是不可变的。除了之外,将归档完全排除在外,并假设可变数组和对这些数组的合理操作:[car1 removeObjectAtIndex:0]不会影响car2。那么,为什么你会认为在unarchivedList1上运行会影响unarchivedList2?
标签: ios objective-c nskeyedarchiver