1

私の質問は奇妙に思えるかもしれませんが、このアイデアをスタッカーの頭の中に入れたいと思っています。私の仕事では、すべてのプロトコルが常にクラスに準拠していることに気付きました。単純なオブジェクトもプロトコルに準拠させる可能性について疑問に思いました。 、そしてそうでない場合(そしてほとんどそうでない場合)、なぜですか??

あなたの懸念に感謝します

4

2 に答える 2

1

プロトコルの適合性には 2 つの部分があります。

  • オブジェクトは、プロトコル定義で必要なメッセージに応答する必要があります
  • オブジェクトはYES、プロトコルに準拠しているかどうかを尋ねられたときに返さなければなりません

NSObjectでは、これら 2 つの条件を満たすように のインスタンスを手配できますか? はい。実際、これを行うには少なくとも 2 つの方法があります。まず、 のすべてのインスタンスをNSObjectプロトコルに準拠させましょう。私たちがしていることはNSObject、最初の部分を解決する 上のカテゴリでプロトコル メソッドを定義することです。次に、"swizzle" (class_replaceMethod()ランタイム関数を使用することを意味します)して、興味深いプロトコル-[NSObject conformsToProtocol:]に戻ります。YES

ここで、conform の特定のインスタンスをNSObjectプロトコルに準拠させたいと考えてみましょう。これは少し簡単です。NSObjectまず、プロトコルに準拠し、必要なメソッドを実装するのサブクラスを作成します。-conformsToProtocol:ランタイム ライブラリはこのクラスが準拠していることを確認できるため、オーバーライドする必要はありません。実行時に、NSObjectインスタンスを呼び出しobject_setClass()て、そのクラスを適合するサブクラスに切り替えます。

于 2013-02-18T09:57:26.850 に答える
0

ランタイム関数を使用して、実行時にクラスにプロトコルを追加できますclass_addProtocol()。ただし、クラスがプロトコルのすべてのメソッドを実装していないときにそうすると、悪い結果が生じる可能性があります。

于 2013-02-18T19:57:32.350 に答える