Objective-Cの公式プロトコルと非公式プロトコルの違いは何ですか?
から 公式ドキュメント
正式および非公式のプロトコル
プロトコルには、公式と非公式の2種類があります。
非公式プロトコルはNSObjectのカテゴリであり、ほとんどすべてのオブジェクトを暗黙的にプロトコルの採用者にします。 (カテゴリーは、サブクラス化せずにクラスにメソッドを追加できるようにする言語機能です。)非公式プロトコルでのメソッドの実装はオプションです。メソッドを呼び出す前に、呼び出し側オブジェクトは、ターゲットオブジェクトがそれを実装しているかどうかを確認します。オプションのプロトコルメソッドがObjective-C 2.0で導入されるまで、非公式のプロトコルはFoundationおよびAppKitクラスが委任を実装する方法に不可欠でした。
formalプロトコルは、クライアントクラスが実装することが予想されるメソッドのリストを宣言します。正式なプロトコルには、独自の宣言、採用、および型チェック構文があります。 @requiredおよび@optionalキーワードを使用して、実装が必須またはオプションであるメソッドを指定できます。サブクラスは、祖先が採用した正式なプロトコルを継承します。正式なプロトコルは、他のプロトコルを採用することもできます。
正式なプロトコルは、Objective-C言語の拡張機能です。
非公式プロトコル:Category
(実装はオプションです)
正式プロトコル:Extension
(実装はオプションで必須です)
Objective-C言語は、メソッドのリスト(宣言されたプロパティを含む)をプロトコルとして正式に宣言する方法を提供します。正式なプロトコルは、言語とランタイムシステムでサポートされています。たとえば、コンパイラはプロトコルに基づいて型をチェックでき、オブジェクトは実行時にイントロスペクトして、それらがプロトコルに準拠しているかどうかを報告できます。