Apple から提供されたサンプル コードを調べていたところ、まだ知られていない興味深いことに出くわしました。ファイル内のサブクラスには、.m
で宣言された複数のセクションがあります@implementation
。最後のものは@implementation
私が期待する通常のものです - すべてのコードが入るクラスの実装ですが、その上には、それぞれが単一のメソッドを定義するいくつかの短い実装があります。これらは次の形式で宣言されます: @implementation ClassName (Convenience)
. 内で定義されたメソッドは、他のメソッドと同じ形式ですが、接頭辞aapl_
. もちろん、それぞれの@implementation
定義の後に続きます。@end,
これらのメソッドをClassName
呼び出す方法は、 のインスタンスを作成してから、標準 API の場合と同様にメソッドを呼び出すことです。[anInstance aapl_thisInterestingMethod:aParameter];
したがって、これは、カテゴリを作成せずにクラスにメソッドを追加する方法のようです。クラスのインスタンスで呼び出します。これは、このファイルにのみ固有です。を使用self
して呼び出し引数を参照できます。
私の質問は次のとおりです。
- それ以上のことはありますか?
- 末尾に (便利) が付くのはなぜですか?
- プレフィックスは、
aapl_
これが標準 API の一部ではなく、独自のメソッドであることを示すためだけに追加されたものですか? - 呼び出し側の引数を通常の引数として受け入れる通常の方法でメソッドを定義するよりも、なぜこれが優れているのでしょうか? 例えば:
[self anInterestingMethod:myInstance withParameter:aParameter];
- これらのタイプのメソッド/実装は何と呼ばれ、それらについて他に何を知っておく必要がありますか?
編集:この質問は、これが重複としてマークされている質問とはまったく関係ありません... @interface is not @implementation