文档章节

iOS - performSelector方法的使用

 水一样的人儿
发布于 2015/12/30 15:53
字数 999
阅读 175
收藏 0

一。举例说明

 [self performSelectorOnMainThread:@selector(RefreshCellForLiveId:)

 withObject:userinfo

 waitUntilDone:YES];

 

 该方法的作用是在主线程中,执行制定的方法(代码块)。

 参数:

 @selector(RefreshCellForLiveId:)就是,要定义我们要执行的方法。

 withObject:userinfo

 定义了,我们执行RefreshCellForLiveId:方法时,传入的参数对象。类型是id。(我们可以传入任何参数)

 waitUntilDone:YES];

 指定,当前线程是否要被阻塞,直到主线程将我们制定的代码块(RefreshCellForLiveId:方法)执行完。

 

 注意:

 1.当前线程为主线程的时候,waitUntilDone:YES参数无效。

 2.该方法,没有返回值

 3.该方法主要用来用主线程来修改页面UI的状态。

二。详细说明

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

 1.performSelectorOnMainThread:withObject:waitUntilDone:

 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

 

 在主线程上执行指定的方法,使用默认的模式(NSDefaultRunLoopMode)。

 默认的模式指:主线程中的方法进行排队,是一个循环队列,并且循环执行。

 参数:

 aSelector:要在主线程执行的方法,该方法不能有返回值,并且只能有一个参数。

 

 arg:要传递的参数,如果无参数,就设为nil

 

 wait:要执行的aSelector方法,是否马上执行。

 如果设置为YES:等待当前线程执行完以后,主线程才会执行aSelector方法;

 设置为NO:不等待当前线程执行完,就在主线程上执行aSelector方法。

 如果,当前线程就是主线程,那么aSelector方法会马上执行。

 

 该方法用途:因为iPhone编程,对UI的修改,只能在主线程上执行。可以用该方法来完成UI的修改。

 

 

 2.performSelector:withObject:afterDelay:

 - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay

 

 在当前线程中执行指定的方法,使用默认模式,并指定延迟。

 参数:

 aSelector:指定的方法。含义同上,不在赘述。

 anArgument:同上

 delay:指定延迟时间(秒)。

 

 3.performSelector

 

 我们常常用到以下3个方法,分别为:

 

 

 - (id)performSelector:(SEL)aSelector;

 - (id)performSelector:(SEL)aSelector withObject:(id)object;

 - (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;

这三个方法相同点都有一个要执行的方法,不同之处在于参数个数不同,参数个数分别为0,1,2。

一般会先使用respondsToSelector方法判断是否能响应该某方法,能得话通过上面三个方法中的一个调用执行方法。

 补充:

 Run loop 相当于 win32 里面的消息循环机制,它可以让你根据事件/消息(鼠标消息,键盘消息,触摸事件,计时器消息等)来调度线程。

 比如:在触摸 UIView 时之所以能够激发 touchesBegan/touchesMoved 等等函数被调用。系统会自动为应用程序的主线程生成一个与之对应的 run loop 来处理其消息循环。让调用更加简单。也避免了繁琐,复杂的操作。

 

 一句话:Run loop是一种消息处理机制!

三。后台前台的问题。

 NSObject类的performSelectorOnMainThread和performSelectorInBackground可以实现简单的多线程编程技术

 

 1、- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

 

 创建一个线程在子线程执行,aSelector代表了新创建的线程,arg是传入的参数

 

 2、- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

 

 该方法的作用是在主线程中,执行制定的方法(代码块)。

 

 参数:

 

 @selector就是,要定义我们要执行的方法。

 

 withObject:arg定义了,我们执行方法时,传入的参数对象。类型是id。(我们可以传入任何参数)

 

 waitUntilDone:YES指定,当前线程是否要被阻塞,直到主线程将我们制定的代码块执行完。

 

 注意:

 

 1.当前线程为主线程的时候,waitUntilDone:YES参数无效。

 

 2.该方法,没有返回值

 

 3.该方法主要用来用主线程来修改页面UI的状态。


© 著作权归作者所有

粉丝 9
博文 158
码字总数 76243
作品 0
杭州
私信 提问
2018 iOS 面试题大全(补充完整版)

原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 这个栏目将持续更新--请iOS的小伙伴关注! 1、iOS 应用导航模式有哪些? 2、iOS 中持久化方式有哪些? 3、...

Theendisthebegi
2018/11/15
0
0
OC中的消息传递-performselector的使用

1、OC中使用Selector来实现函数传递,大致有下面几个原因: (1)iOS中强调消息传递,而非函数调用; (2)iOS SDK中的大部分API都是selector的方式。 (3)你可以在任意时刻对一个对象传递消...

琪与千寻
2013/12/25
342
0
iOS与JS交互之UIWebView-JSExport协议

级别:★★☆☆☆ 标签:「iOS与JS交互」「UIWebView与JS交互」「JSExport」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),JS指前端(不...

QiShare
2018/08/31
0
0
防崩溃第三方库之-DurexKit-master库防崩溃

解决iOS因原生方法抛出的异常引起的程序闪退问题。 原理: 使用Category,参数经过判断后才能执行方法,再将原生抛异常的方法替换,所以不需要修改任何已有的代码,仅import工具包的头文件,...

RainOrz
2015/08/17
463
0
iOS与JS交互之UIWebView-JavaScriptCore框架

级别:★★☆☆☆ 标签:「iOS与JS交互」「UIWebView与JS交互」「JavaScriptCore」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),JS指前...

QiShare
2018/08/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PhotoShop 色调:理解直方图/RGB通道信息

一、直方图:图表的形式,展示图像像素分布的情况 1.平均值:表示平均亮度 2.标准偏差值:表示亮度值范围内的中间值 3.像素: 表示用于计算直方图的像素总数 4.色阶:显示指针下面的区域亮度...

东方墨天
21分钟前
5
0
wildfly(JBoss AS)应用服务器快速入门

什么是wildfly JBoss AS 从8版本起名为wildfly。Wildfly是一个开源的基于JavaEE的轻量级应用服务器。可以在任何商业应用中免费使用。 WildFly是一个灵活的、轻量的、强大管理能力的应用程序服...

程序新视界
45分钟前
4
0
Java集合类常见面试知识点总结

Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾。 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java核心技术 https://blog.csdn.net/column/details/21930...

Java技术江湖
48分钟前
6
0
怎么用for循环打出爱心

先上效果图: 这是用*组成的爱心,下面讲讲思路: 首先这个图形可以拆分成三部分:第一部分是上面三行的两个梯形,第二部分是中间三行的长方形,第三部分是最下面的倒三角形。 其实图形拆分好...

INEVITABLE
54分钟前
4
0
用HttpUrlConnection伪造成HttpClient

https://www.jianshu.com/p/27ad06cc39d2

shzwork
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部