ios - category重写系统方法的调用顺序是怎么样的?
天蓬老师
天蓬老师 2017-04-18 09:42:19
[iOS讨论组]

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

天蓬老师
天蓬老师

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

全部回复(2)
伊谢尔伦

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

PHP中文网

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号