2017-11-29 1 views
0

키가 사전에 있지만 액세스 할 때 objective-c가 새 항목을 작성합니까? std :: map 연산자 []처럼.NSMutableDictionary의 액세스 연산자와 std :: map의 차이점

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; 
} 

답변

1

나는 대답은 NO 생각합니다. 아래 코드로 확인할 수 있습니다.

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 문서를 살펴 봐야합니다.

aKey와 연결된 값이거나 aKey와 연결된 값이없는 경우 nil입니다.

[D objectForKey:@1]입니다. 따라서이 문서에 따르면 값이 1과 연결되어 있지 않으면 nil을 반환합니다. 그 이유는 D[@1] == nil

관련 문제