什么时候使用runloop 以及 performSelector 具体使用方法
2015-11-20 15:38
495 查看
runloop就不介绍了,度娘都告诉大家了,这里简单说一下什么时间点才使用runloop
首先run loop不需要创建,在线程中只需要调用[NSRunLoop currentRunLoop]就可以得到如果你:
1. 使用port或是自定义的input source来和其他线程进行通信
2. 在线程(非主线程)中使用timer
3. 使用 performSelector…系列(如performSelectorOnThread, …)
4. 使用线程执行周期性工作
这些时候可以调用runloop
Run loop 是程序主线程基础设施的关键部分。所以,Cocoa 和 Carbon 程序提供了代码运行主程序的循环并自动启动 run loop。如果你使用 xcode 提供的模板创建你的程序,那你永远不需要自己去显 式的调用这些例程。
对于辅助线程,你需要判断一个 run loop 是否是必须的。如果是必须的,那么 你要自己配置并启动它。你不需要在任何情况下都去启动一个线程的 run loop。
performSelector这个方法对于初学者可能比较陌生,但是迟早你会遇到这个牛逼的方法,下面说一下关于performSelector都有哪些方法:
1、-
(void)performSelectorOnMainThread:(SEL)aSelector
withObject:(id)arg waitUntilDone:(BOOL)wait
aSelector:方法名称
arg:参数(该方法有且只有一个参数,无参数可设为nil)
wait:BOOL值 当前线程若为主线程,aSelector立即执行;
当前若为分线程:YES:等待当前线程执行完毕,主线程执行aSelector;NO:aSelector立刻执行;
2、- (void)performSelector:(SEL)aSelector
withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
aSelector:方法名称
arg:参数(该方法有且只有一个参数,无参数可设为nil)
delay:aSelector方法延迟执行,单位(s)
注:以上在主线程上执行aSelector方法时,默认使用NSDefaultRunLoopMode模式;
3、performSelector可以访问未声明的方法
- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1
withObject:(id)object2;
例:
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
Person *person = [[Personalloc]
init];
[person performSelector:@selector(eat)];
}
@end
Person.h
@interface Person :
NSObject
@end
Person.m
@implementation Person
void eat (idself,
SEL sel)
{
NSLog(@"吃饭了");
}
@end
另两个方法就不赘述了,方法类似。
@end
@end
@end
@end
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- C#线程间不能调用剪切板的解决方法
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- C#线程队列用法实例分析
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码
- VB读取线程、句柄及写入内存的API代码实例
- C#网络编程基础之进程和线程详解
- C#通过Semaphore类控制线程队列的方法
- C#多线程处理多个队列数据的方法
- C#实现线程安全的简易日志记录方法