问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

iOS performSelector(参考)

发布网友 发布时间:2022-11-05 09:01

我来回答

1个回答

热心网友 时间:2023-10-06 04:34

在项目中,常常用到performSelector之类的方法,而且有很多类似方法;今天就来召集一下!
第一点 performSelector的使用

这里需要补充的知识:关于performSelector调用和直接调用方法的区别
1、performSelector是运行时系统负责去找方法的,在编译时候不做任何校验;如果直接调用编译是会自动校验。
如果methodNoParam、methodWithOneParam:、methodWithParams: andParamSecond:不存在
那么直接调用:在编译时候就能够发现(借助Xcode可以写完就发现),但是使用performSelector的话一定是在运行时候才能发现(此时程序崩溃);
Cocoa支持在运行时向某个类添加方法,即方法编译时不存在,但是运行时候存在,这时候必然需要使用performSelector去调用。
所以有时候如果使用了performSelector,为了程序的健壮性,会使用检查方法respondsToSelector。
2、直接调用方法时候,一定要在头文件中声明该方法的使用,也要将头文件import进来。而使用performSelector时候, 可以不用import头文件包含方法的对象,直接用performSelector调用即可。

3、performSelector是在iOS中的一种方法调用方式。他可以向一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以这也是runtime的一种应用方式。
所以performSelector和直接调用方法的区别就在与runtime。直接调用编译是会自动校验。如果方法不存在,那么直接调用 在编译时候就能够发现,编译器会直接报错。
但是使用performSelector的话一定是在运行时候才能发现,如果此方法不存在就会崩溃。所以如果使用performSelector的话他就会有个最佳伴侣respondsToSelector:;来在运行时判断对象是否响应此方法。
备注:runtime???
在这小作总结:OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法。利用runtime机制让我们可以在程序运行时动态修改类、对象中的所有属性、方法,就算是私有方法以及私有属性都是可以动态修改的。

// 动态添加方法
// 开发场景:如果一个类方法非常多,加载了到内存的时候也比较耗费资源,需给每个方法生成映射表,可以使用动态给某个类,添加方法解决.
// 经典面试题:有没有使用preformSelector,其实主要想问有没有添加过方法;

performSelector相关的应用:传递三个及以上的参数
第一种:NSInvocation
第二种:把多个参数封装成一个参数
在这里不做描述:详情参考 https://my.oschina.net/ososchina/blog/644117
第三种:objc_msgSend

第二点

这里需要补充的知识:
Runloop 相当于 win32 里面的消息循环机制,它可以让你根据事件/消息(鼠标消息,键盘消息,触摸事件,计时器消息等)来调度线程。
比如:在触摸 UIView 时之所以能够激发 touchesBegan/touchesMoved 等等函数被调用。系统会自动为应用程序的主线程生成一个与之对应的 run loop 来处理其消息循环。让调用更加简单。也避免了繁琐,复杂的操作。
一句话:Runloop是一种消息处理机制!

参考链接:
http://www.jianshu.com/p/672c0d4f435a
http://blog.sina.com.cn/s/blog_7b9d64af0101bjw4.html
http://blog.csdn.net/meegomeego/article/details/20041887

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 深圳国际贸易中心大厦的标志性建筑 深圳国际贸易中心大厦的介绍 深圳国际贸易大厦的介绍 有谁了解深圳国际贸易中心大厦可以备案吗?有免租期吗? 初一 数学 填空题 平行线的判定 单相变压器通入正弦激磁电流二次侧的空载电压是什么波形? 简述单项变压器绕组末端接地波过程形成的原因以及绕组绝缘设计时应注意什么_百度问一问 在成都住公寓,每天洗澡,不经常做饭,一个月大概20天开空调,一个人住有冰箱,水电大概是多少呢? 新款森林人混动综合性能如何? 斯巴鲁森林人混动版怎么样 森林人有混动版吗 外地人在北京学的驾驶证到期了2017年怎么换证 c1异地换证流程2017年 2017驾驶证异地换证转入可代办吗 驾照到期可以在异地办理换证吗? 2017年驾驶证期满未超过一年可以异地办理换证吗 关于传热学的一道题目 一建筑物玻璃窗尺寸为1m*1.2m,已知其内表面温度为20°C,外表面温度为5℃,玻璃的 科雷傲汽车发动机型号是什么 孕妇鸽子汤怎么炖好喝又营养 怎样炖鸽子汤适合孕妇 iOS performSelector 及相关方法 iOS中responseToSelector方法是不是需要优化 伍斯特理工大学的学校荣誉 孕期时食欲不佳,应该如何增加食欲? 请问黑龙江算是东北吗 小白兔四年级优秀作文400字 怎么可以种头发 黑龙江省是东北三省只之一吗? 哈尔滨是东北吗 新买的手机发热40几度正常吗? iPhone5日常温度30度左右,有时候34度,用金山电池医生检测的,这属于正常现象吗 climbing 和nature是什么意思 家长小学生评语 感觉橘右京这英雄好难操作,技能老是放反有技巧吗 王者荣耀的橘右京可以往前翻吗? 路影下载的视频在哪儿 哪种面料的抑菌性好? 剖腹产什么时候可以吃猪脚醋,剖腹产后几天能吃猪脚姜醋 优秀高中散文欣赏:美丽之秋 手机能开网店吗