オブジェクトの状態を表現するためにNSIntegerやNSStringを使用することがあると思います。 例えば、追加や編集を受け持っているViewControllerについて、動作を変更させたいときです。 動作の変更方法はいくつかやり方があると思いますが、私はViewControllerにstateプロパティを宣言し、呼び出し元から遷移するときに追加の場合は1、編集の場合は2を代入することで動作を変更させています。 この時に、直値で1や2をコーディングしてしまうと呼び出し元にも呼び出し先にも1や2が出てきてしまいます。(リファクタリングでいうマジックナンバー) こういった時に使えるのがtypedef enumです。 Appleの公式サンプルソースにもよく出てくる方法なのでベストプラクティスなんだと思います。 宣言する箇所は呼び出し先のヘッダーファイル(.h)の@interfaceの後ろです