>>196 Objective-C に限らない話だとおもうが、 コレクションから A, B, C を取り出すループを書いて、 (全部 R のサブクラス) そのなかであからさまに C の場合だけ違う処理をさせるというのは 良くないです。 コレクションから取り出すループ内で クラスが C の場合だけ再帰的にしたい、というのは、 カプセル化に反します。
isKindOfClass: とか、 C++ なら dynamic_cast は最後の手段なので、 使いたくなったら反省すべきです。
ループ内ですべき仕事は R のメソッドにしておいて、 for(R* r in array){ [r doSomething]; } として、C での doSomething の実装内で NSMutableArray*array の内部の 操作をするのがよい。