NSMutableDictionary 和 std::map 的访问运算符之间的区别

Difference between access operator of NSMutableDictionary and std::map

当关键字不在字典中但被访问时,objective-c是否创建一个新条目?就像 std::map operator[].

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableDictionary<NSNumber *, NSString *> *D = [NSMutableDictionary new];
        D[@10] = @"ten";
        if (D[@1] == nil) // will it create an entry for D[@1]?
          NSLog(@"Found with nil");
    }
    return 0;
}

我认为答案是。您可以通过以下代码查看。

int main(int argc, char * argv[]) {
  @autoreleasepool {
    NSMutableDictionary<NSNumber *, NSString *> *D = [NSMutableDictionary new];
    D[@10] = @"ten";
    NSLog(@"%@", D); // { 10 = ten; } logged
    if (D[@1] == nil) // will it create an entry for D[@1]?
      NSLog(@"%@", D); // { 10 = ten; } logged. @1 key doesn't exist
  }
}

除此之外,您应该查看有关 objectForKey: 方法的 Apple 文档。

The value associated with aKey, or nil if no value is associated with aKey.

D[@1][D objectForKey:@1] 的语法糖。因此根据文档,如果没有值与键 1 相关联,它将 return nil。这就是为什么 D[@1] == nil