티스토리 뷰

발생일: 2016.02.29

키워드: NSDictionary, NSMutableDictionary, NSKeyValueCoding, Key-Value Coding, 키-값 코딩, KVC

문제:
사전 객체에서 valueForKey를 호출할 때, 키 앞에 @를 넣는 코드가 있다.
뭘 의미하는 걸까?


해결책:

사전 클래스 NSDictionary 와 NSMutableDictionary 는 NSKeyValueCoding 프로토콜의 메서드를 제공해서 키-값 코딩에 대응한다.

NSDictionary 에는 다음 메서드가 정의되어 있다.

- (id) valueForKey: (NSString *)key;

키 문자열의 앞 부분이 '@'로 시작하는 경우 슈퍼 클래스의 valueForKey: 를 호출하고, 그렇지 않은 경우엔 objectForKey: 를 호출한다.


예)
@interface NSMutableDictionary (MyDic)
- (NSString *)foo;
@end

@implementation NSMutableDictionary (MyDic)
- (NSString *)foo {
    return @"I am KVC foo value";
}
@end

int main(void) {
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    
    [dic setObject:@"foovalue" forKey:@"foo"];
    
    NSLog(@"%@", [dic valueForKey:@"foo"]); //-> foovalue
    NSLog(@"%@", [dic valueForKey:@"@foo"]); //-> I am KVC foo value
    
    return 0;
}

반응형
댓글
공지사항