iOS - performSelector方法的使用

一。举例说明

 [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的状态。


转载于:https://my.oschina.net/u/2560887/blog/592410

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值