Objective-C: valueForKey의 키 값에 @를 쓰는 경우

발생일: 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;
}

저작자 표시 비영리 변경 금지
신고

카테고리

분류 전체보기 (659)
About me. (6)
Daylogs (624)
영어공부 (0)
My works - 추억 (29)
비공개 (0)