objectForKey:
- это метод NSDictionary
. NSDictionary
- это класс коллекции, аналогичный NSArray
, за исключением того, что вместо использования индексов он использует ключи для различения элементов. Ключ - это произвольная строка, которую вы предоставляете. Никакие два объекта не могут иметь одинаковый ключ (точно так же, как никакие два объекта в NSArray
не могут иметь одинаковый индекс).
valueForKey:
- это метод KVC. Это работает с любым классом. valueForKey:
позволяет получить доступ к свойству, используя строку для его имени. Например, если у меня есть класс Account
со свойством accountNumber
, я могу сделать следующее:
NSNumber *anAccountNumber = [NSNumber numberWithInt:12345];
Account *newAccount = [[Account alloc] init];
[newAccount setAccountNumber:anAccountNUmber];
NSNumber *anotherAccountNumber = [newAccount accountNumber];
Используя KVC, я могу получить динамический доступ к свойству:
NSNumber *anAccountNumber = [NSNumber numberWithInt:12345];
Account *newAccount = [[Account alloc] init];
[newAccount setValue:anAccountNumber forKey:@"accountNumber"];
NSNumber *anotherAccountNumber = [newAccount valueForKey:@"accountNumber"];
Это эквивалентные наборы утверждений.
Я знаю, вы думаете: вау, но саркастически. KVC выглядит не так уж и полезно. На самом деле это выглядит "многословно". Но когда вы хотите что-то изменить во время выполнения, вы можете сделать много интересных вещей, которые намного сложнее в других языках (но это выходит за рамки вашего вопроса).
Если вы хотите узнать больше о KVC, есть много учебных пособий, если вы пользуетесь Google, особенно в блоге Скотта Стивенсона . Вы также можете проверить справочник по протоколу NSKeyValueCoding .
Надеюсь, это поможет.