利用runloop开启常驻线程

Runloop中自动释放池的创建和释放

第一次创建:启动runloop

最后一次销毁:runloop退出的时候

其他时候的创建和销毁:runloop即将睡眠的时候销毁之前的释放池,重新创建一个新的


runloop在开发中的应用场景:

最长使用的就是开一个常驻线程 (让一个子线程不进入消亡状态,等待其他线程发来详细,处理其他时间)

在子线程中开启一个定时器

在子线程中进行长期监控

可以控制定时器在特定模式下执行

可以让某些事件(行为,任务)在特定模式下执行

可以添加Observer监听runloop的状态,比如监听点击事件(在所有点击事件之前做一些事情)

总所周知,一条子线程随着任务的执行完毕就会挂掉,那么如何保证子线程不挂掉呢?

解决方法:开runloop

以下下是示例代码

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic,strong)NSThread *thread;

@end



@implementation ViewController

- (IBAction)creatBtn:(id)sender {
    
    self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(task) object:nil];
    [self.thread start];
}

- (IBAction)goonBtn:(id)sender {
    

   
    //想让上面开的线程执行完毕后继续工作,需要做一个线程间的通信
    [self performSelector:@selector(task2) onThread:self.thread withObject:nil waitUntilDone:YES];
    
}


-(void)task
{
    NSRunLoop *runloop=[NSRunLoop currentRunLoop];
    //为了保证runloop不退出
//    NSTimer *timer=[NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES];
//    
//    [runloop addTimer:timer forMode:NSDefaultRunLoopMode];
    NSLog(@"%s",__func__);
    [runloop addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
    [runloop run];
   
}

-(void)task2
{
    NSLog(@"task2-----%@",[NSThread currentThread]);

}

-(void)run
{
     NSLog(@"%s",__func__);
}

//


@end


你可能感兴趣的:(利用runloop开启常驻线程)