RunLoop开辟常驻线程

runLoop创建一个常驻线程,多次用到子线程去处理事件,避免频繁的创建,销毁线程,每条线程都有一个RunLoop,他只有能获取到RunLoop.主线程也是通过创建(main函数中)才有的RunLoop

- (void)viewDidLoad {

[super viewDidLoad];

[self threadTest];

}

- (void)threadTest{

NSThread *subThread = [[NSThread alloc] initWithTarget:self selector:@selector(subThreadEntryPoint) object:nil];

[subThread setName:@"TestThread"];

[subThread start];

self.subThread = subThread;

}

//子线程启动后,启动runloop

- (void)subThreadEntryPoint{

@autoreleasepool {

NSRunLoop *runLoop = [NSRunLoop currentRunLoop];

//如果注释了下面这一行,子线程中的任务并不能正常执行

//1.开启RunLoop死循环

[runLoop addPort:[NSMachPort port] forMode:NSRunLoopCommonModes];

//2.当前RunLoop,并不是创建新的RunLoop,RunLoop是懒加载的过程,只有第一次是创建,虽然是死循环,但是可以执行该线程外(在此子线程上)的消息

[[NSRunLoop currentRunLoop] run];

//3.通过控制_finished值来中指RunLoop,或者更粗暴的终止线程[NSThread exit];

while(!_finished) {

[[NSRunLoop currentRunLoop]runUntilDate:[NSDatedateWithTimeIntervalSinceNow:0.0001]];

}

NSLog(@"启动RunLoop前--%@",runLoop.currentMode);

[runLoop run];

}

//子线程任务

- (void)subThreadOpetion{

NSLog(@"启动RunLoop后--%@",[NSRunLoop currentRunLoop].currentMode);

NSLog(@"%@----子线程任务开始",[NSThread currentThread]);

[NSThread sleepForTimeInterval:3.0];//模拟事件}

NSLog(@"%@----子线程任务结束",[NSThread currentThread]);

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

[self performSelector:@selector(subThreadOpetion) onThread:self.subThread

withObject:nil waitUntilDone:NO];

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ======================= 前言 RunLoop 是 iOS 和 OSX 开发中非常基础的一个...
    i憬铭阅读 4,383评论 0 4
  • 基本概念 进程 进程是指在系统中正在运行的一个应用程序,而且每个进程之间是独立的,它们都运行在其专用且受保护的内存...
    小枫123阅读 4,455评论 0 1
  • runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, ...
    made_China阅读 4,937评论 0 7
  • 一、什么是runloop 字面意思是“消息循环、运行循环”。它不是线程,但它和线程息息相关。一般来讲,一个线程一次...
    WeiHing阅读 12,530评论 11 111
  • RunLoop 文章目录 RunLoop简介 1.1 什么是RunLoop? 1.2 RunLoop和线程 1.3...
    May_d8f1阅读 2,372评论 0 1

友情链接更多精彩内容