ios - category重写系统方法的调用顺序是怎么样的?
天蓬老师
天蓬老师 2017-04-18 09:42:19
0
2
592

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

Antworte allen(2)
伊谢尔伦

根据runtime的消息传递机制中的核心函数void objc_msgSend(id self,SEL cmd,...)来发送消息,先从当前类中查找调用的方法,若没有找到则继续从其父类中一层层往上找,那么对于category重写同一个方法,则在消息传递的过程中,会最先找到category中的方法并执行该方法。对于多个分类调用同一个方法,Xcode在运行时是根据buildPhases->Compile Sources里面的从上至下顺序编译的,编译时通过压栈的方式将多个分类压栈,根据后进先出的原则,后编译的会被先调用,当objc_msgSend找到方法并调用之后,就不再继续传递消息,所以形成所谓上的覆盖。并不是后面创建的就一定被调用,得看创建之后其在buildPhases->Compile Sources里面的位置。

Ty80

按runtime加载分类方法的顺序来覆盖
一般实现的就是最后一个加载分类的方法

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage