performSelector 那点事
来源:互联网 发布:php蜘蛛程序 编辑:程序博客网 时间:2024/06/05 03:21
在项目中,常常用到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
- performSelector 那点事
- performSelector 那点事
- performSelector 那点事
- performSelector 那点事
- performSelector 那点事
- performSelector 那点事
- performSelector 那点事
- ios之performSelector 那点事
- 面试那点事
- 公司那点事
- 编程那点事!!
- 公务员那点事
- 毕业那点事
- JVM 那点事
- C++那点事
- 【粗心】那点事
- 【春运】那点事
- 内存那点事
- Quartz 框架快速入门(三)
- 嵌入式学习-驱动开发前奏-lesson2-内存管理与进程管理子系统
- schema_reference.4: 无法读取方案文档 'http://cxf.apache.org/schema/jaxws.xsd', 原因为 1) 无法找到文档; 2) 无法读取文档; 3)
- PO DTO DAO 小结
- Android画一条虚线
- performSelector 那点事
- GreenDao的简单使用说明(五)多表n:m
- C#中的排序
- tableviewcell 2级折叠
- 多线程游戏服务器开发(2)-编写网络库
- 排序——希尔排序
- private public protected slots的区别
- Dynamics CRM 导出系统中实体的属性字段到EXCEL
- 查看系统版本信息