美文网首页iOS点点滴滴
RunLoop开辟常驻线程

RunLoop开辟常驻线程

作者: w佐w | 来源:发表于2017-10-07 08:57 被阅读14次

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];

}

}

相关文章

  • RunLoop开辟常驻线程

    runLoop创建一个常驻线程,多次用到子线程去处理事件,避免频繁的创建,销毁线程,每条线程都有一个RunLoop...

  • RunLoop常驻线程

    在开发中,经常遇到的便是开启一个线程,当线程的任务完成,该线程便会被自动收回。但是如果我们需要一个线程一直存在,等...

  • 多线程篇

    因为performSelector方法是需要依赖线程runLoop,但是开辟的子线程默认是没有开启runLoop的...

  • iOS 多线程面试题(NSThread+runloop实现常驻线

    NSThread+runloop实现常驻线程 NSThread在实际开发中比较常用到的场景就是去实现常驻线程。 由...

  • iOS-Runloop常驻线程/性能优化

    主要聊聊以下内容 1 Runloop基本概要2 Runloop与定时器3 Runloop常驻线程4 Runloop...

  • runloop

    runloop跟线程师一一对应的。 自己创建的线程师没有runloop 如何实现一个常驻线程: 1 为当前线程开启...

  • 实现后台常驻线程

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

  • Runloop与多线程

    线程是和runloop一一对应的。自己创建的线程默认是没有runloop的。 思考 怎样实现一个常驻线程? 代码实...

  • iOS-Runloop常驻线程/性能优化

    懵逼 主要聊聊以下内容 1 Runloop基本概要 2 Runloop与定时器 3 Runloop常驻线程 4 R...

  • iOS RunLoop常驻线程

    常驻线程的作用: 让一个一直存在的子线程,等待其他线程发来消息,处理其他事件。 1.设置成全局的,如果是线程对象是...

网友评论

    本文标题:RunLoop开辟常驻线程

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