switch caseのメインループでの高速化みたいなもの

 今回は、performSelector:による高速化とは真逆のベタ書きによる高速化についてです。


 随分昔、iModeのアプリが10KBの頃、無駄に関数を呼び出すのも、
変数名の文字数を増やすのもメモリ容量が許さなかった頃、こんな方法をとっていました。
(変数名はツールで短縮にするのがはやりでした)


void mainLoop() {
  int flg; // ObjCならBOOL isLoop;とかの方がふさわしいでしょうね。
  do {
    flg = 0;
    switch (mode) {
      case 0:
        // 処理
        flg = 1; // ループする
        mode = 2; // 次の飛び先を指定しています。 goto ジャンプのような使い方です。
        break;
      case 1:
        // 処理
        break;
      case 2: // 実は何かの処理をまとめたメソッドもどき
        // 処理
        break;
    }
  } while (flg); // flg==1の時はループするので、flg=1として飛び先をmodeに入れるとジャンプ!


 という方法です。
 modeとflgを使って、switch case内の条件分岐へジャンプするという仕組みです。
 一時配列をスタックとして使って、modeの値を保存すれば、サブルーチン的な呼び出しもできます。


 ただこの方法、メインループに全部詰め込む為、やたらと長くなります。読み難いです。
 こういう方法もあったのだなぁ、というご紹介でした。