私の理解では、プロトコルは他の言語のインターフェイスのようなものであり、期待されるメソッドを宣言しますが、カテゴリを使用すると、新しいメソッドを既存の型に追加できます (おそらく、所有していない型も含まれます)。
では、なぜ iPhone SDK はデリゲート型の宣言にカテゴリを使用することがあるのでしょうか? 通常、すべてのデリゲートが id<MyDelegateProtocol> と入力されることを期待しますが、そうでない例がたくさんあります。
たとえば、NSURLConnection を参照してください。そのデリゲートは「id」と入力され、「コントラクト」は NSObject (NSURLConnectionDelegate) のカテゴリとして宣言されます。
では、これらの場合にカテゴリを使用する動機は何ですか?