- (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: 精要概览(持续更新)相关推荐

  1. performSelector:withObject:afterDelay: 的用法

    为什么80%的码农都做不了架构师?>>>    - (void)performSelector:(SEL)aSelector withObject:(id)anArgument af ...

  2. ios学习--iphone开发笔记和技巧总结(原址持续更新)

    ios学习--iphone开发笔记和技巧总结(原址持续更新) 分类: ios Object-C2012-04-18 10:16 2716人阅读 评论(1) 收藏 举报 uiviewiphonelist ...

  3. cocos2d-x学习笔记(持续更新)

    接受触屏事件的优先级是值越小,响应触屏事件的优先级越高 Z值越大,越外面 粒子系统设计工具:Particle Designer软件  目前只支持MAC平台 导出 plist文件 地图设计工具:Tile ...

  4. 前端面试题精编2020(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)持续更新

    文档描述 本文是关注微信小程序的开发和面试问题, 由基础到困难循序渐进, 适合面试和开发小程序. 并有热点框架(vue react node.js 全栈)前端资源以及后端视频资源和源码 并基于前端进阶 ...

  5. ECCV2020 收录论文汇总(持续更新中)附打包下载

    2020极市计算机视觉开发者榜单已于2020年7月20日开赛,8月31日截止提交,基于火焰识别.电动车头盔识别.后厨老鼠识别.摔倒识别四个赛道,47000+数据集,30万奖励等你挑战!点击这里报名 极 ...

  6. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  7. unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了

    ----------------塔防(更新中),作者重写了基础篇(下方目录为:1.1(新) 基础)目前还在持续连载了5篇,因为不多我们更新完就能追到原作者的进度了------------------- ...

  8. ArcGIS10从入门到精通系列实验图文教程(附配套实验数据持续更新)

    文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 本教程<ArcGIS从入门到精通系列实验教程>内容包括:ArcGIS平台简介.ArcGIS应用基础.空间数据的采集 ...

  9. 2019最新Web前端经典面试试题及答案,持续更新

    Ps: 文章所述内容,来源渠道平时积累以及网上摘录.按日期持续更新...目录: 转载请注明来源. -2018/6/8   1.position的定位方式 2.描述下从输入URL到整个网页加载完毕及显示 ...

最新文章

  1. 漫画:到底什么是微服务?
  2. 设计模式 (3) : 单例模式的几种方法
  3. Passport用户认证
  4. Boost:opencv卷积的测试程序
  5. 微信小程序 对request方法二次封装
  6. matlab实现非线性规划
  7. 工作组win7计算机无法访问,win7系统没有权限访问工作组计算机的解决方法
  8. Gcc:gcc -o操作
  9. Redis配置文件解读
  10. Netty之大名鼎鼎的EventLoop
  11. Android开发之来电电话挂断实现
  12. 小甲鱼 C语言 24课 指针和二维数组
  13. php_2017手册,PHP中文手册下载-PHP中文手册官方2017(带用户注释)chm版-东坡下载
  14. git clone报错Could not resolve proxy : proxy-szn
  15. java 生成数字_Java随机生成数字的方法
  16. Autosar Nm机制
  17. 请你根据微信登录界面设计测试用例
  18. CheatSheet——PCL
  19. 从DLL生成LIB文件
  20. linux系统中的挂载点:

热门文章

  1. 个人代码库のC#可移动按钮“相关代码”
  2. Nodejs express 获取url参数,post参数的三种方式
  3. salesforce 零基础学习(十八)WorkFlow介绍及用法
  4. php数组的几个函数和超全局变量
  5. java截取字符串函数
  6. Android下pm命令详解
  7. 【iOS开发】代理(delegate)
  8. 代码无错是优? 工厂模式
  9. 【论文写作】SSM校园招聘系统如何写摘要部分
  10. 【毕业答辩】学位论文答辩ppt指南!