将未归档的对象分配给不同的对象有效,为什么/如何?

时间:2015-11-15 04:22:10

标签: objective-c nskeyedarchiver nskeyedunarchiver

分配一个已归档的字典对象但是未归档并分配给一个数组似乎不会产生异常,并且数组中已注销的数据是字典的数据,如果可以分配给数组,则根本不是数组格式不同的返回类型,有点链接转换,而是你的unarchiving和直接分配。为什么这样做?如果有人能够更深入地解释它,它将揭示对未归档过程及其工作方式的更好理解。

     NSDictionary *glossary = @{
                               @"Abstract class": @"some class",
                               @"Adopt": @"borrow",
                               @"archiving": @"Storing an object for later use"
                               };
    if([NSKeyedArchiver archiveRootObject:glossary toFile:@"propertyList2.plist"] == YES)
        NSLog(@"Archive success");
     else
        NSLog(@"Archive unsuccessfull");

    NSArray *unArchiving = [NSKeyedUnarchiver unarchiveObjectWithFile:@"propertyList2.plist"];
    NSLog(@"%@", unArchiving); 

       //for (NSString *obj in unArchiving) {
       //  NSLog(@"%@: %@", obj,unArchiving[obj]);
       //   }

1 个答案:

答案 0 :(得分:0)

欢迎来到Objective-C!由于语言的动态性,对象引用(AKA变量)的类型实际上仅在编译时很重要。在运行时,对象 的内容很重要;当你编写代码时,你认为它应该是什么。

您的unarchiving代码的工作原因是因为for (X x in Y)语法对于数组和字典是相同的。类似地,索引语法(a[x])是相同的。所有这些都是在运行时根据迭代的集合类型处理的。只要语义相同,您的代码就会运行而不会出错。显然,当您尝试将该字典视为数组时(例如,参考.lastObject),它会爆炸。