Разница между двумя синтаксисами для NSMutableDictionary - PullRequest
0 голосов
/ 11 августа 2011

Может кто-нибудь сказать, пожалуйста, точную разницу между этими двумя синтаксисами, Я нашел это по совпадению

Структура выглядит так:

-> NSMutableArray (CategoryAry)
    ...> NSMutableDictionary (multiple number of dictionaries)


 NSLog(@"%@",[(NSMutableDictionary *)[CategoryAry objectAtIndex:indexPath.row+1] valueForKey:@"status"]);
 NSLog(@"%@",(NSMutableDictionary *)[[CategoryAry objectAtIndex:indexPath.row+1] valueForKey:@"status"]);

Хотя оба печатают одинаковые результаты.

1 Ответ

1 голос
/ 11 августа 2011
[(NSMutableDictionary *)[CategoryAry objectAtIndex:indexPath.row+1] valueForKey:@"status"]);

"objectAtIndex" преобразуется в NSMutableDictionary *, затем в нем ищется значение "status".

(NSMutableDictionary *)[[CategoryAry objectAtIndex:indexPath.row+1] valueForKey:@"status"]);

Объект "status" преобразуется в NSMutableDictionary *

Первый вызов - это правильный синтаксис.

Во-вторых, почему это работает?
Метод valueForKey вызывается для идентификатора и, как кажется, словарь, он работает и возвращает исчерпывающий результат. Затем для этого результата вызывается метод "description" (@ "% @"), и, поскольку этот метод существует для любого объекта, приведение результата к NSMutableDictionary не приводит к ошибке. Метод вызывается для возвращенного подкласса, и этот результат отображается в NSLog.

Полагаю, что для второго вызова может появиться предупреждение компилятора?

...