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...