runloop相关应用

runloop是属于线程触发的底层基本单元,当一个应用程序app在运行过程当中,之因此不会忽然死掉就是由于runloop一直在循环运行,runloop的内部是由不少的mode组成session


runloop的应用app

  1. 切换不一样触发source   好比滑动runloop中能够实现timer图片轮播socket

  2. 当主线程中有很重要的事情要处理,不能再开辟一个线程来处理事务的时候  能够在这个主线城中添加一个souce  一个source就是一个selector,在主线程中处理该事务(既不阻塞主线程  也不耽误事件的触发)。oop


  3. 将NSStream的runloopsource加入到新线程的runloop中


  1. [[session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop]
                              forMode:NSDefaultRunLoopMode];
    因主线程有事务要处理,会阻塞主线程外设事件的触发;搜了一下论坛,有一个帖子提供了思路:
    “将socket的runloopsource添加到新开的线程的runloop中,并在新线程中显示启动runloop就能够了”
    spa

  2. 个人理解是:建立一个线程,取得它的runloop,而后用相似上面的代码将其加入,这样就不会阻塞接收数据事件的回调了。线程

    即[NSThread detachNewThreadSelector: @select(act:) toTarget: self withObject:nil];
    [[session inputStream] scheduleInRunLoop:threadRunLoop
                              forMode:NSDefaultRunLoopMode];事件

    -(void)act:(id)
    {
        threadRunLoop = [NSRunloop currentRunloop];
        if (!threadShouldExit)
        {
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:limitDate];
        }
    }
    图片

  3. 而后将stream加入到子线程的runloop中便可。事务

相关文章
相关标签/搜索