[(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.
Полагаю, что для второго вызова может появиться предупреждение компилятора?