performSelector详解

发布时间:2014-10-23 23:25:43
来源:分享查询网

在项目中,常常用到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; 首先,定义要调用的方法   - (void)methodNoParam{     NSLog(@"methodNoParam"); } - (void)methodWithOneParam:(id)paramFirst{     NSLog(@"methodWithOneParam: %@", paramFirst);      } - (void)methodWithParams:(id)paramFirst andParamSecond:(id) paramSecond{      NSLog(@"methodWithOneParam: %@,%@", paramFirst,paramSecond);             } 其次,进行调用 // 没有参数     BOOL isNoParam= [self.selfViewControllerDelegate respondsToSelector:@selector(methodNoParam)];     if (isNoParam) {         [self.selfViewControllerDelegate performSelector:@selector(methodNoParam)];     }          // 一个参数     BOOL isOneParam= [self.selfViewControllerDelegate respondsToSelector:@selector(methodWithOneParam:)];     if (isOneParam) {         [self.selfViewControllerDelegate performSelector:@selector(methodWithOneParam:) withObject:@"firsht"];     }          // 二个参数     BOOL isParams= [self.selfViewControllerDelegate respondsToSelector:@selector(methodWithParams: andParamSecond:)];     if (isParams) {         [self.selfViewControllerDelegate performSelector:@selector(methodWithParams: andParamSecond:) withObject:@"first" withObject:@"second"];     } So easy!!! 补充: Run loop 相当于 win32 里面的消息循环机制,它可以让你根据事件/消息(鼠标消息,键盘消息,触摸事件,计时器消息等)来调度线程。  比如:在触摸 UIView 时之所以能够激发 touchesBegan/touchesMoved 等等函数被调用。系统会自动为应用程序的主线程生成一个与之对应的 run loop 来处理其消息循环。让调用更加简单。也避免了繁琐,复杂的操作。 一句话:Run loop是一种消息处理机制! 原文地址http://blog.sina.com.cn/s/blog_7b9d64af0101bjw4.html

返回顶部
查看电脑版