検索

ホームページ  >  に質問  >  本文

ios - category重写系统方法的调用顺序是怎么样的?

我知道category方法是可以覆盖系统的方法,但是当有几个category重写同一个方法的时候调用顺序是怎么样子的啊?我开始写代码测试了一下,看不出来是按什么顺序来的,总是后面创建的category的方法被调用,其他的都被覆盖了。。。很想知道这是为什么,怎么证实这一点,依据是什么。。。有知道的朋友指点一下下咯☺

天蓬老师天蓬老师2771日前595

全員に返信(2)返信します

  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:44:19

    ランタイム メッセージ受け渡しメカニズムのコア関数 void objc_msgSend(id self,SEL cmd,...) に従ってメッセージを送信するには、まず現在のクラスから呼び出しメソッドを見つけます。見つからない場合は、メソッドの呼び出しを続けます。その親クラス レイヤーごとに検索し、同じメソッドがカテゴリーに対して書き換えられると、メッセージ配信プロセス中に、カテゴリー内のメソッドが最初に検索され、実行されます。複数のカテゴリが同じメソッドを呼び出す場合、Xcode は実行時に buildPhases -> Compile Sources で上から下の順序に従ってコンパイルされ、後入れ先出しに従って、コンパイル中に複数のカテゴリがスタックにプッシュされます。原則として、コンパイル後のメソッドが最初に呼び出されます。objc_msgSend がメソッドを見つけて呼び出すと、メッセージの送信は続行されなくなるため、いわゆるオーバーライドが形成されます。必ずしも、後で作成したものが呼び出されるというわけではありません。作成後の buildPhases->Compile Sources の場所によって異なります。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 09:44:19

    実行時読み込み分類メソッドの順序に従ってオーバーライドします
    通常、分類を読み込む最後のメソッドが実装されます

    返事
    0
  • キャンセル返事