RunLoop常驻线程

62cdfbda95d3cb31b132ba83adb028848926625cbf28-FIdW4E_fw658.jpeg

在开发中,经常遇到的便是开启一个线程,当线程的任务完成,该线程便会被自动收回。
但是如果我们需要一个线程一直存在,等待执行某个任务该怎么办呢?
我们可以使用RunLoop来实现
首先:
1. 线程的声明周期与任务有关,任务完成之后,他就会被系统自动销毁,以节省开支。
2.RunLoop用于控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。
3.每个RunLoop都有一个mode ,model中有timer/source/observer/, 只要这个mode存在,RunLoop 就不会退出

代码实现

@interface ViewController ()
@property (strong, nonatomic)   NSThread            *subThread;  
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
//创建一个子线程
    NSThread *subThread = [[NSThread alloc] initWithTarget:self selector:@selector(subThread) object:nil];
//开启线程
    [subThread start];
    self.subThread = subThread;

 }
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//当点击的时候在指定的线程上执行一个任务
    [self performSelector:@selector(threadAction) onThread:self.subThread withObject:nil waitUntilDone:NO];
}
//绑定线程事件
- (void) subThread
{
    NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
    [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
    [runLoop run];//加入当前的RunLoop
}
- (void)threadAction
{
      [NSThread sleepForTimeInterval:3.0];
}
@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容