performSelector:withObject:afterDelay: 精要概览(持续更新)
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
--1--
知识点:这个方法是单线程的,也就是说只有当前调用此方法的函数执行完毕后,selector方法才会被调用。
- (void)mainMethod { [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1];NSLog(@"调用方法==开始");sleep(5);NSLog(@"调用方法==结束"); }- (void)delayMethod {NSLog(@"执行延迟方法"); }执行结果(注意log打印的顺序):调用方法==开始调用方法==结束执行延迟方法
实战经验:正因为本方法是一个单线程的,所以有些时候,我们会遇到虽然调用了这个方法,但是不执行的问题。这时,我们需要将原代码改造如下:
改造前代码:无法执行延迟方法
-(void)someMethod {[self performSelector:@selector(labelDidDisappeared:) withObject:label afterDelay:2]; //因为某些原因,不被调用,没有执行 }-(void)labelDidDisappeared:(UILabel *)label{[label removeFromSuperview];[label release]; }
改造后代码: 可以正常执行延迟方法
-(void)someMethod {//关键 [self performSelectorOnMainThread:@selector(labelWillDisappeared:) withObject:label waitUntilDone:NO]; }-(void)labelWillDisappeared:(UILabel *)label {[self performSelector:@selector(labelDidDisappeared:) withObject:label afterDelay:2]; }-(void)labelDidDisappeared:(UILabel *)label {[label removeFromSuperview];[label release]; }
知识扩展:以下两个方法均是多线程方法
- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
和
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
参考:http://blog.csdn.net/baxiaxx/article/details/7878338 感谢原作者的无私和奉献!
--2--
知识点:该方法只能接受一个参数。如果需要传递多个参数怎么办呢? 让selector调用的方法接受的参数类型修改为Dictionary类型。
注意:
(1)如果调用的selector不接受参数则,withObject:nil
(2) 通过performSelector:withObjcet:afterDelay调用的方法不能有返回值
知识扩展:performSelector 带多个参数
//第一个试验:带一个参数- (void) fooOneIput:(NSString*) first { NSLog(@"Logs %@", first); } //然后调用它 [self performSelector:@selector(fooOneInput:) withObject:@"first"]; //第二个试验:带多个参数- (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second {NSLog(@"Logs %@ then %@", first, second); } //然后调用它 [self performSelector:@selector(fooFirstInput:secondInput:) withObject:@"first" withObject:@"second"];
实战经验:经实验,只有performSelector: withObject: 方法可以带多个参数,其它类似的perform方法均不行,包括和此方法最类似的performSelectorInBackground:withObject: 方法。
延伸阅读:
IOS开发之延迟执行
IOS 取消延迟执行函数 (perform selector)
IOS 关于取消延迟执行函数的种种:performSelector与cancelPreviousPerformRequestsWithTarget
performSelector:withObject:afterDelay: 精要概览(持续更新)相关推荐
- performSelector:withObject:afterDelay: 的用法
为什么80%的码农都做不了架构师?>>> - (void)performSelector:(SEL)aSelector withObject:(id)anArgument af ...
- ios学习--iphone开发笔记和技巧总结(原址持续更新)
ios学习--iphone开发笔记和技巧总结(原址持续更新) 分类: ios Object-C2012-04-18 10:16 2716人阅读 评论(1) 收藏 举报 uiviewiphonelist ...
- cocos2d-x学习笔记(持续更新)
接受触屏事件的优先级是值越小,响应触屏事件的优先级越高 Z值越大,越外面 粒子系统设计工具:Particle Designer软件 目前只支持MAC平台 导出 plist文件 地图设计工具:Tile ...
- 前端面试题精编2020(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)持续更新
文档描述 本文是关注微信小程序的开发和面试问题, 由基础到困难循序渐进, 适合面试和开发小程序. 并有热点框架(vue react node.js 全栈)前端资源以及后端视频资源和源码 并基于前端进阶 ...
- ECCV2020 收录论文汇总(持续更新中)附打包下载
2020极市计算机视觉开发者榜单已于2020年7月20日开赛,8月31日截止提交,基于火焰识别.电动车头盔识别.后厨老鼠识别.摔倒识别四个赛道,47000+数据集,30万奖励等你挑战!点击这里报名 极 ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了
----------------塔防(更新中),作者重写了基础篇(下方目录为:1.1(新) 基础)目前还在持续连载了5篇,因为不多我们更新完就能追到原作者的进度了------------------- ...
- ArcGIS10从入门到精通系列实验图文教程(附配套实验数据持续更新)
文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 本教程<ArcGIS从入门到精通系列实验教程>内容包括:ArcGIS平台简介.ArcGIS应用基础.空间数据的采集 ...
- 2019最新Web前端经典面试试题及答案,持续更新
Ps: 文章所述内容,来源渠道平时积累以及网上摘录.按日期持续更新...目录: 转载请注明来源. -2018/6/8 1.position的定位方式 2.描述下从输入URL到整个网页加载完毕及显示 ...
最新文章
- 漫画:到底什么是微服务?
- 设计模式 (3) : 单例模式的几种方法
- Passport用户认证
- Boost:opencv卷积的测试程序
- 微信小程序 对request方法二次封装
- matlab实现非线性规划
- 工作组win7计算机无法访问,win7系统没有权限访问工作组计算机的解决方法
- Gcc:gcc -o操作
- Redis配置文件解读
- Netty之大名鼎鼎的EventLoop
- Android开发之来电电话挂断实现
- 小甲鱼 C语言 24课 指针和二维数组
- php_2017手册,PHP中文手册下载-PHP中文手册官方2017(带用户注释)chm版-东坡下载
- git clone报错Could not resolve proxy : proxy-szn
- java 生成数字_Java随机生成数字的方法
- Autosar Nm机制
- 请你根据微信登录界面设计测试用例
- CheatSheet——PCL
- 从DLL生成LIB文件
- linux系统中的挂载点: