Runloop - 运行循环

 

参考文章

作用

  • 通过 RunLoop 机制实现省电,流畅,响应速度快,用户体验好
  • 事件循环伪代码
function loop() {
    initialize();
    do {
        var message = get_next_message();
        process_message(message);
    } while (message != quit);
}

特性

  • iOS 中所有的事件监听全部由运行循环负责
  • 主线程的 RunLoop 在应用启动的时候就会自动创建
  • 其他线程则需要在该线程下自己启动
  • 不能自己创建 RunLoop
  • RunLoop 并不是线程安全的,所以需要避免在其他线程上调用当前线程的 RunLoop
  • RunLoop 负责管理 autorelease pools
  • RunLoop 负责处理消息事件,即输入源事件、计时器事件和网络请求事情

应用场景

  • 创建常驻线程,执行一些会一直存在的任务。该线程的生命周期跟 App 相同
@autoreleasepool {
    NSLog(@"%@", [NSThread currentThread]);

    NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
    // 只有添加端口后,才能能够保证运行循环持续运行
    [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
    [runLoop run];

    // 线程结束之前,不会执行至此
    NSLog(@"%@", [NSThread currentThread]);
}
  • 维护线程的生命周期,让线程不自动退出,isFinished 为 Yes 时退出
  • 在一定时间内监听某种事件,或执行某种任务的线程
posted @ 2016-10-11 15:06  笔锋至此  阅读(143)  评论(0编辑  收藏  举报