NSThread(分线程):提高应用程序的运行效率
开辟多线程的要点:
1.同一时间,CPU只能处理一条线程,即同一时间只能执行一个程序顺序流;
2.多线程是并发(同时)执行任务,其实是CPU在不同线程间的快速切换;
3.线程过多会导致CPU调度频次提高,导致CPU资源大量消耗,使CPU大量损耗(一般不超过5条);
分线程:相互不影响,分开执行,独立存在的线程
注意:
1.不能在分线程中刷新UI控件;
2.在分线程中创建定时器只会执行循环一次,需打开该线程的runLoop才能循环执行;
开辟分线程的方式:1.NSThread;2.GCD(C语言方法);3.NSOperation(操作队列)
分线程生命周期:由线程代码决定
开辟线程NSThread方法:
创建分线程的方式一:
NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(threadRun) object:nil];
[thread start];
创建分线程的方式二:
[NSThread detachNewThreadSelector:@selector(threadRun) toTarget:self withObject:nil];
创建分线程的方式三:(隐式开辟)
[self performSelectorInBackground:@selector(threadRun) withObject:nil];
线程休眠:[NSThread sleepForTimeInterval:休眠时间];
回到主线程:[self performSelectorOnMainThread:主线程执行方法 withObject:nil waitUntilDone:YES];
线程退出:[NSThread exit];
线程标记:- (void)cancel 该方法标记当前线程的isCancel属性的状态并调用该属性
线程维活:
分线程由于是临时调用,在结束分配给它的任务后,就会进入休眠,再次使用,需要再次请求并开启新的线程,在实际开发中,往往会在分线程执行一些不定时的经常性任务,这样频繁开启分线程,就会损耗手机性能,这时候我们可以维持一个固定的分线程用来执行这一系列任务。
我们可以在分线程的方法中循环调用NSRunLoop以维持活性,NSRunLoop不消耗系统性能也不会占用线程
- (void)threadRun {
while(YES) {
[[NSRunLoop currentRunLoop]runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
}
当我们需要执行任务的时候可以用performSelector:onThread:withObject:waitUntilDone:方法来调用线程
[self performSelector:@selector(performEvent) onThread:thread withObject:nil waitUntilDone:NO];
- (void)performEvent {
//执行事件
}
网友评论