iOS之创建一个常驻线程

常驻线程有什么用呢?
让一个一直存在的子线程,等待其他线程发来消息,处理其他事件。

注意 :不要使用GCD的global队列创建常驻线程
原因:global全局队列,整个工程共用的队列,队列里的所有线程都会放进一个线程池中,当线程池满了的时候,就会进入等待状态,后面加进来的block就不会创建新的线程执行了 等待前面的任务执行完成,才会继续执行。如果线程池中的线程长时间不结束,后续堆积的任务会越来越多

@interface LongThreadDemoController ()
@property (nonatomic, strong) NSThread *thread;
 
@end
 
@implementation LongThreadDemoController
 
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    self.title = @"常驻线程Demo";
     
}
 
- (void)threadRunloopPoint:(id)__unused object{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    @autoreleasepool {
        [[NSThread currentThread] setName:@"changzhuThread"];
        NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
        //// 这里主要是监听某个 port,目的是让这个 Thread 不会回收
        [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
        [runLoop run];
    }
}
 
 
- (NSThread *)thread{
     
    if(!_thread){
        _thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadRunloopPoint:) object:nil];
        [_thread start];
    }
    return _thread;
     
}
 
 
 
- (void)test{
     
    NSLog(@"%s",__func__);
}
 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     
     
    [self performSelector:@selector(test) onThread:self.thread withObject:nil waitUntilDone:NO modes:@[NSDefaultRunLoopMode]];
     
}

个人博客地址:https://youyou0909.github.io

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS多线程编程 基本知识 1. 进程(process) 进程是指在系统中正在运行的一个应用程序,就是一段程序的执...
    陵无山阅读 11,310评论 1 14
  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 7,787评论 1 17
  • 窗前有一棵枝繁叶茂的大杨树。树干粗壮,枝Y向外伸展出七八米,一片片浓绿的、心形的叶子重重叠叠,在微风中飒飒...
    静待花开yoyo阅读 4,547评论 3 3
  • 洗衣服。完成。抹桌子,擦电脑。完成。扫地。完成。 玩了会游戏。上某网上不去。甚好。洗脸,洗脚。完成。 看书。没有。...
    惟有进步值得信仰阅读 1,807评论 0 1