これはObjective-Cとはほとんど関係がありませんが、Objective-CではCと多く関係しています。一般に、状態マシンの状態を表すためにenumを使用するのは、単純な整数よりも優先されるべきです。
スイッチでクラスを使用できない理由は、switch文のcaseラベルで使用される式の値をコンパイル時に知る必要があるためです。 [STATE_CLASS LOOPING_STATE]
がクラスメソッドを呼び出すと、コンパイラはコンパイル時にその式の結果を安全に知ることができないため、switch文の生成を拒否します。
なぜコンパイラはコンパイル時に大文字小文字のラベルに使用される式の結果を知る必要がありますか? switch文の背後にあるアイデアは、一連の意味的に同等のif/else ifブロックよりも効率的です。これは、スイッチステートメントを無条件ジャンプを伴うディスパッチテーブルに変換することによって達成されるが、if/else if解決策は多くの条件付きジャンプを必要とする。簡単に推測できるように、コンディショナルジャンプは、パイプライン全体をフラッシュする可能性があるため、現代のパイプライン型CPU設計とは根本的に矛盾しています。 (現代のCPUは洗練された分岐予測で補償しようとしますが、問題を完全に回避できれば良いでしょう)
しかし、それを正しいものにしておくことはまず最初に来て、それを速くします。