美文网首页
关于RunLoop的中的使用场景

关于RunLoop的中的使用场景

作者: 落雪无痕_t | 来源:发表于2016-07-16 22:26 被阅读209次
  • RunLoop的创建
    • 可以认为所有线程的RunLoop都是懒加载的,直接使用currentRunLoop直接可以拿到当前线程的RunLoop对象,如果在mainThread中就拿到的是mainRunLoop,
      其代码分别如下
    • 主线程

[NSRunLoop mainRunLoop];
CFRunLoopGetMain()

   - 非主线程

[NSRunLoop currentRunLoop];
CFRunLoopGetCurrent();

- RunLoop的Mode
   - Source:简单来说分为Source0 和Source1
       - Source0:非基于port的
       - Source1:基于port的,一般情况下,Source1处理完以后交给Source0处理
    - Observer
      给一个RunLoop添加一个Observer:这里用的是CFRunLoop的函数,OC并没有提供对应的API
     ```
CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHander(kCFAllocatorDefault,kCFRunLoopAllActivities,YES,0,^(CFRunLoopObserverRef observer,CFRunLoopActivitity activity){
   
   });
      ```
这里是创建一个observier,其中第二个参数需要监听的RunLoop的活动类型,Block是监听到RunLoop的活动回调的block

![Snip20160529_1.png](https://img.haomeiwen.com/i2443652/36cd132036fd5aeb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这张图片就是官方文档中RunLoop可以被监听的活动类型

CFRunLoopAddObserver(CFRunLoopGetCurrent(),observer,kCFRunLoopDefaultMode);

这里是给指定的RunLoop添加指定模式下的Observer

- 那么怎样给一个线程添加一个RunLoop
   - 方法一:
     创建一个port是让RunLoop有source而不至于销毁
     ```
    [[NSRunLoop currentRunLoop]addPort:[[NSPort alloc]init]forMode:NSDefaultRunLoopMode];
    [[NSRunLoop currentLoop]run];
这里还要注意的是,要手动调用run方法开启RunLoop
- 方法二:
  在一个while(1)循环中不断的创建RunLoop,然后不断销毁的过程,知道RunLoop有了source才能循环
   ```
   while(1)
  {
       [[NSRunLoop currentLoop]run];
   }
  ```
  • RunLoop的关闭
    • 如果用OC的方法开启的RunLoop因为没有提供关闭的方法,因此一般情况下是无法关闭的,这里想要手动关闭,只能应用C语言函数去开启和关闭
    //C语言方式开启RunLoop
     CFRunLoopRun();
     //关闭
     CFRunLoopStop(self.runLoop);
    

其实RunLoop涉及到的东西是非常多也是非常复杂的,今天就谈一谈一些常见的运用和个人浅薄的见解,望各位不吝改正和赐教

作者:胥鸿儒

相关文章

  • 关于RunLoop的中的使用场景

    RunLoop的创建可以认为所有线程的RunLoop都是懒加载的,直接使用currentRunLoop直接可以拿到...

  • RunLoop

    详情见: iOS中的RunLoop 1、什么是RunLoop?2、开发中如何使用RunLoop?什么应用场景?3、...

  • RunLoop面试题

    1、什么是RunLoop?2、开发中如何使用RunLoop?什么应用场景?3、RunLoop和线程有什么关系?4、...

  • iOS RunLoop入门小结

    说明iOS中的RunLoop使用场景1.保持线程的存活,而不是线性的执行完任务就退出了<1>不开启RunLoop的...

  • RunLoop -- 相关问题的总结

    1、RunLoop在实际场景的应用 RunLoop -- 在实际开发中的应用 2、RunLoop内部实现逻辑 Ru...

  • RunLoop总结:RunLoop的应用场景(四)

    今天要介绍的RunLoop使用场景很有意思,在做长期项目,需要跟踪解决用户问题非常有用。 使用RunLoop 监测...

  • iOS POSIX多线程编程

    关于多线程的介绍、多线程的创建、使用场景和Runloop可以参考《iOS多线程编程指南》。已上传到GitHub仓库...

  • RunLoop总结:RunLoop的应用场景(四)App卡顿监测

    今天要介绍的RunLoop使用场景很有意思,在做长期项目,需要跟踪解决用户问题非常有用。使用RunLoop 监测主...

  • RunLoop学习总结

    通过以下文章学习记录 关于Runloop的原理探究及基本使用 深入理解RunLoop RunLoop完全指南 Ru...

  • Runloop的模式及应用

    runloop的5个类 首先,Core Foundation中关于runloop的类: runloop运行时,只能...

网友评论

      本文标题:关于RunLoop的中的使用场景

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