私の質問は奇妙に思えるかもしれませんが、このアイデアをスタッカーの頭の中に入れたいと思っています。私の仕事では、すべてのプロトコルが常にクラスに準拠していることに気付きました。単純なオブジェクトもプロトコルに準拠させる可能性について疑問に思いました。 、そしてそうでない場合(そしてほとんどそうでない場合)、なぜですか??
あなたの懸念に感謝します
私の質問は奇妙に思えるかもしれませんが、このアイデアをスタッカーの頭の中に入れたいと思っています。私の仕事では、すべてのプロトコルが常にクラスに準拠していることに気付きました。単純なオブジェクトもプロトコルに準拠させる可能性について疑問に思いました。 、そしてそうでない場合(そしてほとんどそうでない場合)、なぜですか??
あなたの懸念に感謝します
プロトコルの適合性には 2 つの部分があります。
YES
、プロトコルに準拠しているかどうかを尋ねられたときに返さなければなりませんNSObject
では、これら 2 つの条件を満たすように のインスタンスを手配できますか? はい。実際、これを行うには少なくとも 2 つの方法があります。まず、 のすべてのインスタンスをNSObject
プロトコルに準拠させましょう。私たちがしていることはNSObject
、最初の部分を解決する 上のカテゴリでプロトコル メソッドを定義することです。次に、"swizzle" (class_replaceMethod()
ランタイム関数を使用することを意味します)して、興味深いプロトコル-[NSObject conformsToProtocol:]
に戻ります。YES
ここで、conform の特定のインスタンスをNSObject
プロトコルに準拠させたいと考えてみましょう。これは少し簡単です。NSObject
まず、プロトコルに準拠し、必要なメソッドを実装するのサブクラスを作成します。-conformsToProtocol:
ランタイム ライブラリはこのクラスが準拠していることを確認できるため、オーバーライドする必要はありません。実行時に、NSObject
インスタンスを呼び出しobject_setClass()
て、そのクラスを適合するサブクラスに切り替えます。
ランタイム関数を使用して、実行時にクラスにプロトコルを追加できますclass_addProtocol()
。ただし、クラスがプロトコルのすべてのメソッドを実装していないときにそうすると、悪い結果が生じる可能性があります。