20

メソッド スウィズリングを使用して、クラス内のすべてのメソッド呼び出しをいくつかの追加機能でラップしていました。具体的には:

  • このメソッド呼び出しに必要なオブジェクトがキャッシュにあるかどうかを確認しています
  • キャッシュにそのオブジェクトがあった場合は、それを返します。
  • そうでない場合は、元の実装にディスパッチし、キャッシュにデータを入力してそれを返します。

各方法について、推奨される方法に再ルーティングします。+ (BOOL)resolveInstanceMethod:(SEL)sel と IMP_implementationWithBlock を使用して新しいメソッドを実装します。

うまくいきましたが、コードがうまく読めませんでした。NSProxy は、この機能を実装するためのより適切な方法を提供するようです。

しかし、さらに別の方法として、単に NSObject サブクラスを代役にして、ターゲット オブジェクトのメソッドの周りのメソッド呼び出しをインターセプトすることもできます。forwardInvocation と methodSignatureForSelector をオーバーライドすることで、必要な結果を得ることができます。

では、NSProxy は何を提供してくれるのでしょうか? 代わりにこれを使用する必要があるのはなぜですか?

4

1 に答える 1

15

ポイントNSProxyは、ほとんどのメソッドを実装していないことです。これは、Objective-C 転送機構が最初に呼び出されることを確認するために必要です。から始めるとNSObject、転送する機会がなくても直接ディスパッチされるメソッドがたくさんあります。

于 2013-08-17T03:20:21.743 に答える