performSelector:withObject:afterDelay: 精要概览(持续更新)
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
--1--
知识点:这个方法是单线程的,也就是说只有当前调用此方法的函数执行完毕后,selector方法才会被调用。
- (void)mainMethod
{
[self performSelector:@selector(delayMethod) withObject:nil afterDelay:]; NSLog(@"调用方法==开始"); sleep(); NSLog(@"调用方法==结束");
} - (void)delayMethod
{
NSLog(@"执行延迟方法");
} 执行结果(注意log打印的顺序): 调用方法==开始
调用方法==结束
执行延迟方法
实战经验:正因为本方法是一个单线程的,所以有些时候,我们会遇到虽然调用了这个方法,但是不执行的问题。这时,我们需要将原代码改造如下:
改造前代码:无法执行延迟方法
-(void)someMethod
{ [self performSelector:@selector(labelDidDisappeared:) withObject:label afterDelay:]; //因为某些原因,不被调用,没有执行 } -(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:];
} -(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 取消延迟执行函数 (perform selector)
IOS 关于取消延迟执行函数的种种:performSelector与cancelPreviousPerformRequestsWithTarget

performSelector:withObject:afterDelay: 精要概览(持续更新)的更多相关文章
- performSelector withObject afterDelay 在子线程上调用不运行
如题,这是最近在修改一个数据同步模块时发现的问题.整个数据同步的任务是在App启动后放在一个后台执行的线程中的,执行某个单条数据同步任务成功后,会使用 [self performSelector:(n ...
- UITableView与UIScrollView的一些问题(持续更新)
UITableView的一些常用操作 --------------------------------------------------------------------------------- ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- 【转】基于Jenkins实现持续集成【持续更新中】
知识预览 持续集成 Jenkins安装 Jenkins插件 Jenkins配置 Jenkins备份与恢复 发布PHP项目 SVN 发布Maven项目 按版本发布 远程管理 War文件部署设置 任务 J ...
- 基于Jenkins实现持续集成【持续更新中】
持续集成 1.什么是持续集成:Continuous integration (CI)持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生 ...
- iPadOS 更新日志 - 持续更新中
本文只是为了简单记录一下每个正式版本发布时间和更新内容,只有这个初衷,从2019年9月25日开始,将会持续更新. iPadOS 13.1 - 2019年9月25日 经全新命名的 iPadOS 是一款强 ...
- Android 程序员不得不收藏的个人博客(持续更新...)
本文已收录我的 Github ,持续更新中 ,欢迎点赞 ! 每周打开一次收藏夹里的个人博客,已经成为了我的人生一大乐趣. 相比各大博客平台,我一直更加偏爱个人博客.在每个人自己的这一亩三分地里,你能看 ...
- ArcGIS10从入门到精通系列实验图文教程(附配套实验数据持续更新)
@ 目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 本教程<ArcGIS从入门到精通系列实验教程>内容包括:ArcGIS平台简介.ArcGIS应用基础.空间数据的采集 ...
- JUC并发包与容器类 - 面试题(一网打净,持续更新)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
随机推荐
- How-to: disable the web-security-check in Chrome for Mac
When I try to test one web app in coperate intranet, there is always some error like "Failed to ...
- Docker: 解决Centos 7中Permission Denied的问题
当用docker -v挂载volume后,会出现Permission Denied的问题,这有时是因为SeLinux导致的.解决方法如下: chcon -Rt svirt_sandbox_file_t ...
- (原创)android Sqlite多线程访问异常解决方案
在开发Android的程序的时候sqlite数据库是经常用到的:在多线程访问数据库的时候会出现这样的异常:java.lang.IllegalStateException: Cannot perform ...
- OC数组排序
NSArray *array = @[@"tailong", @"kaersasi", @"airuiliya", @"yingl ...
- CocoaPods的使用
一.安装Cocoapods步骤:(在终端安装) 1.在安装前,需确保已经安装了Ruby环境 mac 下安装Ruby环境步骤: (1).安装RVM $ curl -L https://get.rvm.i ...
- 可折叠的ToolBar+抽屉菜单NavigationView+浮动按钮FloatButton
使用Material Design风格的ToolBar和抽屉导航 先看个简单的运行效果 主要记录下布局的写法 1 用到的Google Design依赖和V7包依赖 compile 'com.andro ...
- IOS之UI -- UITableView -- 1 -- 相关初识
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- Scrum不是万能药,要在时机成熟时推行
敏捷很火热,大家都在谈敏捷:但不是所有团队都适合敏捷! 需要等待时机,时机成熟了,才推! 什么时候算时机成熟呢? 我们的经验是需要两点: 一.团队有三名或以上的研发工程师 : 二. 团队内有一名合适的 ...
- Windows Server 2008 下ASP程序连接ORACLE数据库驱动错误
今天开发那边升级.改造系统过程中,在测试服务器碰到关于ASP程序连接ORACLE数据库的小问题,虽然是小问题,但是整起来真要命啊,花了不少时间,主要是ASP程序啊,这种上古神器,哥还是当年毕业的时候弄 ...
- HttpClient使用方法(包括POST文件)
最近在做跨系统的数据交互业务,从.Net的系统提交数据到Java的系统. 简单的表单Get.POST都没问题,但是有个功能是要提交普通文本和文件,试了好多都有问题,最后用HttpClient小折腾了一 ...