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中便可。事務

相關文章
相關標籤/搜索