美文网首页
实现后台常驻线程

实现后台常驻线程

作者: 雷霸龙 | 来源:发表于2021-03-03 17:33 被阅读0次

    添加一条用于常驻内存的强引用的子线程,在该线程的RunLoop下添加一个Sources,开启RunLoop。

    #import "ViewController.h"
    
    @interface ViewController ()
    @property (nonatomic, strong) NSThread * thread;   // 添加强引用的子线程
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        
        // 创建线程,并调用run1方法执行任务
        self.thread = [[NSThread alloc] initWithTarget:self selector:@selector(run1) object:nil];
        // 开启线程
        [self.thread start];
    }
    
    
    - (void)run1 {
        // 这里写任务
        NSLog(@"------run1------");
        
        // 添加下边两句代码,就可以开启RunLoop,之后self.thread就变成了常驻线程,可随时添加任务,并交于RunLoop处理
        [[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
        [[NSRunLoop currentRunLoop] run];
        
        // 测试是否开启了RunLoop,如果开启RunLoop,则来不了这里,因为RunLoop开启了循环。
        NSLog(@"未开启RunLoop");
    }
    
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        // 利用performSelector,在self.thread的线程中调用run2方法执行任务,如果run2执行,则说明self.thread是常驻线程
        [self performSelector:@selector(run2) onThread:self.thread withObject:nil waitUntilDone:NO];
    }
    
    - (void)run2 {
        NSLog(@"------run2------");
    }
    
    
    @end
    

    相关文章

      网友评论

          本文标题:实现后台常驻线程

          本文链接:https://www.haomeiwen.com/subject/nnfcqltx.html