1

私は最近、スウィズルを行う必要があるプロジェクトを開始しました。

多くのチュートリアルを経た後、「実装と関数ポインターの違いは何ですか?」という質問がありました。

4

1 に答える 1

3

メモリから見ると、IMP は関数ポインタのようなメモリ アドレスであり、通常の C 関数のように呼び出すことができます。ただし、objective-C メッセージング規則を使用することが保証されています。

  • 最初の引数は、操作するオブジェクト (self) です。
  • 2 番目の引数は、_cmd呼び出される (SELECTOR) です。これは、元の実装をプロキシでラップできる ObjC メッセージ転送などの動的機能をサポートするためだと思います。たとえば、トランザクションを開始したり、セキュリティ チェックを実行したり、Cocoa 固有の例では、いくつかのプロパティ監視クラフトを追加したりできます。 、実行時に魔法で。関数の署名は既にありますが、場合によっては、「どうやってここにたどり着いたのか」を知るのに役立ちます。メッセージ署名付き。
  • 後続の引数がある場合は、メソッド コントラクトに従います。
于 2015-12-30T04:56:13.987 に答える