RunLoop的启动与对应的退出方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RunLoop的启动与对应的退出方式相关的知识,希望对你有一定的参考价值。

参考技术A 来源: ios开发-RunLoop的退出方式

启动一个runloop有以下三种方法:

- (void)run;

- (void)runUntilDate:(NSDate *)limitDate;

- (BOOL)runMode:(NSRunLoopMode)mode beforeDate:(NSDate *)limitDate;

(1) 第一种方式,runloop会一直运行下去,在此期间会处理来自输入源的数据,并且会在NSDefaultRunLoopMode模式下重复调用runMode:beforeDate:方法;

  (2) 第二种方式,可以设置超时时间,在超时时间到达之前,runloop会一直运行,在此期间runloop会处理来自输入源的数据,并且也会在NSDefaultRunLoopMode模式下重复调用runMode:beforeDate:方法;

  (3) 第三种方式,runloop会运行一次,超时时间到达或者第一个input source被处理,则runloop就会退出,注意!!!这个方法会阻塞当前线程,直到返回结果(YES:输入源被处理或者达到指定的超时值,NO:没有启动成功)。

退出方式:

如果不想退出runloop可以使用第一种方式启动runloop;
使用第二种方式启动runloop,可以通过设置超时时间来退出;
使用第三种方式启动runloop,可以通过设置超时时间或者使用CFRunLoopStop方法来退出。

具体可以参考苹果文档给出的方案,如下:

NSRunLoop *myLoop  = [NSRunLoop currentRunLoop];

myPort = (NSMachPort *)[NSMachPort port];

[myLoop addPort:_port forMode:NSDefaultRunLoopMode];

BOOL isLoopRunning = YES; // global

while (isLoopRunning && [myLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]])

//关闭runloop的地方

- (void)quitLoop



    isLoopRunning = NO;

    CFRunLoopStop(CFRunLoopGetCurrent());

以上是关于RunLoop的启动与对应的退出方式的主要内容,如果未能解决你的问题,请参考以下文章

RunLoop相关知识的总结

ios runloop总结

RunLoop在main线程和自己创建的线程如何启动

iOS中RunLoop和线程的关系

Runloop(运行循环)是什么?

iOS 子线程用runloop保活的一个方案