NSRunLoop 概述和原理

2021-06-24 18:08:49 字數 1130 閱讀 5745

1.什麼是nsrunloop?我們會經常看到這樣的**:

- (ibaction)start:(id)sender

[progress sethidden:yes];

}

這段**很神奇的,因為他會「暫停」**執行,而且程式執行不會因為這裡有乙個while迴圈而受到影響。在[progress sethidden:no]執行之後,整個函式想暫停了一樣停在迴圈裡面,等loadpageinbackground裡面的操作都完成了以後才讓[progress sethidden:yes]執行。這樣做就顯得簡介,而且邏輯很清晰。如果你不這樣做,你就需要在loadpageinbackground裡面表示load完成的地方呼叫[progress sethidden:yes],顯得**不緊湊而且容易出錯。

2. nsrunloop工作原理

接下來看一下nsrunloop具體的工作原理,首先是官方文件提供的說法,看圖:

通過所有的「訊息」都被新增到了nsrunloop中去,而在這裡這些訊息並分為「input source」和「timer source」 並在迴圈中檢查是不是有事件需要發生,如果需要那麼就呼叫相應的函式處理。為了更清晰的解釋,我們來對比vc++和ios訊息處理過程。

vc++中在一切初始化都完成之後程式就開始這樣乙個迴圈了(**是從戶sir mfc程式設計課程的slides中擷取):

int apientry winmain(hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline,int ncmdshow)

}

}

...

while(running)

...

}

現在會過頭來看看剛才的那個會「暫停」**的例子,有沒有更加深入的認識了呢?

cocoachina社群原帖:

NSRunLoop概述和原理

1.什麼是nsrunloop?我們會經常看到這樣的 1 2 3 4 5 6 7 8 9 10 ibaction start id sender progress sethidden yes 2.nsrunloop工作原理 接下來看一下nsrunloop具體的工作原理,首先是官方文件提供的說法,看圖 ...

NSRunLoop概述和原理

1.什麼是nsrunloop?我們會經常看到這樣的 1 2 3 4 5 6 7 8 9 10 ibaction start id sender progress sethidden yes 2.nsrunloop工作原理 接下來看一下nsrunloop具體的工作原理,首先是官方文件提供的說法,看圖 ...

NSRunLoop 概述和原理

ibaction start id sender progress sethidden yes 這段 很神奇的,因為他會 暫停 執行,而且程式執行不會因為這裡有乙個while迴圈而受到影響。在 progress sethidden no 執行之後,整個函式想暫停了一樣停在迴圈裡面,等loadpage...