有关NSDictionary初始化的问题

时间:2020-08-13 15:45:59

标签: nsdictionary

结果是4 2 3,但是此NSDictionary的初始化过程中发生了什么? 这是因为它的分配只是在第一次执行,而忽略了其余分配给相同键的分配?还是因为它的分配以反向顺序执行?

NSDictionary *dic = @{
                          @"a":@"4",
                          @"b":@"2",
                          @"c":@"3",
                          @"a":@"1",
                          @"b":@"5",
                          @"c":@"6",
    };
    NSLog(@"luozhiyong,%@",dic[@"a"]);
    NSLog(@"luozhiyong,%@",dic[@"b"]);
    NSLog(@"luozhiyong,%@",dic[@"c"]);

1 个答案:

答案 0 :(得分:0)

摘自NSDictionary的文档:

NSDictionary 。与唯一键关联的对象的静态集合。

除了提供的初始化程序(如initWithObjects:forKeys :)之外,您还可以使用字典文字创建NSDictionary对象。

NSDictionary *dictionary = @{
       @"anObject" : someObject,
    @"helloString" : @"Hello, World!",
    @"magicNumber" : @42,
         @"aValue" : someValue
};

在Objective-C中,编译器生成的代码对底层的DictionaryWithObjects:forKeys:count:方法进行调用。

摘自dictionaryWithObjects:forKeys:count的文档:

此方法逐步遍历对象和键数组,并在新字典中创建条目。

结果

NSDictionary *dic = @{
                      @"a":@"4",
                      @"b":@"2",
                      @"c":@"3",
                      @"a":@"1",
                      @"b":@"5",
                      @"c":@"6",
};

是不可预测的,在Foundation的其他版本中可能有所不同。在macOS 10.13.6上,重复的密钥将被忽略。