これらがすべてあなたが作成したコードである場合、これを行う最善の方法はLayer
、変数ではなく、クラス自体にプロトコルを採用させることです。
@interface Layer : NSObject <CocosNodeOpacity> { ... }
このアプローチの主な利点は、コンパイル時にプロトコルに必要なすべてのメソッドが実装されているかどうかをコンパイラがチェックすることです。これは通常、必要なことです。標準クラスの実装の残りの部分と同じ場所にメソッドを追加すると、理解が容易になり (魔法のコードがどこから来たのかを探す必要がなくなります)、カテゴリを使用するよりも壊れにくくなります (異なるカテゴリを介して同じメソッドを追加すると、未定義の動作が発生する可能性があります)。 . 原則として、(クローズド ソースの) サードパーティ コードにメソッドを追加するなど、必要な場合にのみカテゴリを使用します。
のソースを制御しない場合はLayer
、ivar を宣言するときに代わりにこれを使用する必要がある場合があります。
Layer<CocosNodeOpacity> *content;
プロトコルを採用すると、クラス型で変数を静的に型付けし、メソッドが存在しない場合にコンパイル警告を受け取ることができることに注意してください。ただし、メソッドを実装する必要があるため、「無料で」メソッドを取得することはできません。id
それでも、プロトコルと静的型付けを賢明に使用すると、すべての型として使用するよりも、コードをより堅牢で "フェイル ファスト" にすることができます。安易な道を選ばないことは称賛に値します。:-)
プロトコルの詳細 (必須およびオプションのメソッドを含む) については、この SO answerを参照してください。