亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

詳解performselector應(yīng)用場景 performselector實(shí)現(xiàn)原理( 二 )


這個(gè) mode 就是 CFRunLoopModeRef 類型,所以里面存儲(chǔ)一堆的 CFRunLoopModeRef 類型的 mode 。
而 _currentMode 也是 CFRunLoopModeRef 這個(gè)類型,所以我們很容易得出一個(gè)結(jié)論:
一個(gè) RunLoop 對(duì)象里面有一堆的 mode,也就是存在 _modes 里面,里面只有一個(gè)是 _currentMode 。
我們?cè)俑Q探一下源碼,看下 mode 里面存儲(chǔ)的是什么?
所以我們來個(gè)總結(jié)的圖:
RunLoop 有很多種模式,對(duì)應(yīng)的 _currentMode 只有一種 。
CFRunLoopModeRef1.CFRunLoopModeRef 它是代表 RunLoop 的運(yùn)行模式;
2.一個(gè) RunLoop 包含若干個(gè) Mode,每個(gè) Mode 又包含若干個(gè)Source0/Source1/Timer/Observer;
3.RunLoop 啟動(dòng)時(shí)只能選擇其中一個(gè) Mode,作為 currentMode;
4.如果需要切換 Mode,只能退出當(dāng)前 RunLoop,再重新選擇一個(gè) Mode 進(jìn)入;
5.不同組的Source0/Source1/Timer/Observer 能分割開來,互不影響;
6.如果 Mode 里面沒有任何Source0/Source1/Timer/Observer,RunLoop 會(huì)立馬退出;
如果只能在一種模式下運(yùn)行,對(duì)性能什么的都有很大好處,比如我在滑動(dòng)模式下,不考慮不滑動(dòng)的模式,所以就不會(huì)卡頓,順暢很多 。還有注意的就是,它切換 mode 是在循環(huán)里面切換的,所以不會(huì)導(dǎo)致程序退出 。
常見的 mode 有 2 種,其他情況很少見,所以掌握這兩個(gè)一般都是沒問題了
1.KCFRunLoopDefaultMode (NSDefaultRunLoopMode):App 的默認(rèn) Mode,通常是主線程是在這個(gè) Mode 下運(yùn)行;
2.UITrackingRunLoopMode : 界面跟蹤 Mode,用于 ScrollView 追蹤觸摸滑動(dòng),保證界面滑動(dòng)時(shí)不受其他 Mode 影響;
RunLoop 到底做哪些事?RunLoop 在不停執(zhí)行的時(shí)候到底具體做了哪些事?其實(shí)是 RunLoop 在不停循環(huán)的時(shí)候,就是處理每個(gè) mode 下的 Source0、Source1、Timer、Observer 這里面的事件,那我們就來看看這里面具體對(duì)應(yīng)的到底是什么事件 。
Source0
觸摸事件、performSelector:onThread:
比如我們的 touchbegin 這個(gè)我們看下下面的代碼:
Source1
基于 Port 的線程間的通信,系統(tǒng)事件的捕捉 。
(兩個(gè)線程之間相互傳遞消息的處理,系統(tǒng)事件捕捉,其實(shí)也包括觸摸事件,只是把事件捕捉到以后傳遞給 Source0) 。
Timer
NSTimer 定時(shí)器,performSelector:withObject:afterDelay (這個(gè)方法的底層實(shí)現(xiàn)也就是 NSTimer 來實(shí)現(xiàn)的) 。
Observers
用于監(jiān)聽 RunLoop 的狀態(tài),UI 的刷新 (BeforeWaiting),Autorelease pool(BeforeWaiting) 。
(在 RunLoop 休眠之前都會(huì)去執(zhí)行 UI 的刷新啊、Autorelease pool 的釋放等)
以上這些東西,完全就是我們平時(shí)開發(fā)中經(jīng)常寫的代碼,比如設(shè)置背景色,設(shè)置 frame 等等 。
由于 RunLoop 知識(shí)點(diǎn)比較多,如果寫太多不利于大家的閱讀和消化,所以其他內(nèi)容放在后面介紹!


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!

「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助: