NSRunLoop的進一步理解

2021-08-26 04:54:27 字數 1289 閱讀 2808

先說一下我自己的理解:

我個人理解的nsrunloop就是:可以給 nsrunloop 設定一堆的 input sources 和 observers,它們之間通過乙個叫 「run loop mode」的東西關聯起來,實際上就是乙個 nsstring 而已, 對於 main thead 的 runloop, 就開始不斷的的輪詢每乙個 input source,看看有沒有 event 發生,如果有event,就給相關的observer 傳送 notification, 給observer去處理event, 例如當發生的 touch event 的時候。

我們會經常看到這樣的**:

1

2

3

4

5

6

7

8

9

10

-(ibaction

)start

:(id

)sender

[progress sethidden

:yes];

} 2. nsrunloop工作原理

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

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

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

1

2

3

4

5

6

7

8

9

intapientry winmain

(hinstance hinstance

,hinstance hprevinstance

,lpstr lpcmdline

,intncmdshow

)}}1

2

3

4

5

6

7

(...

)... }

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

bufferedReader進一步理解

public static void main string args string mystring system.out.println 請輸入明文 bufferedreader buf new bufferedreader new inputstreamreader system.in try...

進一步理解委託

前面一篇文章介紹了委託的基本知識,接下來就進一步研究一下委託。其實,剛開始覺得委託型別是乙個比較難理解的概念,怎麼也不覺得下面的 assembleiphonehandler 是乙個型別。public delegate void assembleiphonehandler 按照正常的情況,如果我們要建...

前端進一步理解

非常開心能夠在這裡作工作匯報和個人總結,這是我鼓起勇氣的結果,算是成功了一半,呵呵。從剛來公司茫然失措的菜蛋到現在稍顯成熟的菜鳥,我知道我離成功又進了一步。以下是我對前端的理解和對自己這段時間的總結 一 前端職責 前端開發是由網頁製作演變而來的,它的主要職能就是把 的介面更好地呈現給使用者,主要包括...