RunLoop常驻线程

RunLoop常驻线程_第1张图片
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 *)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

你可能感兴趣的:(RunLoop常驻线程)