亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

關于RunLoop

2019-11-09 17:53:47
字體:
來源:轉載
供稿:網友

1.RunLoop是一種機制 : 讓線程結束時不關閉,而是進入休眠狀態等待喚醒.讓線程能隨時處理事件但并不退出.

2.RunLoop 實際上就是一個對象,這個對象管理了其需要處理的事件和消息,并提供了一個入口函數來執行上面 Event Loop(do-while) 的邏輯,線程執行了這個函數后,就會一直處于這個函數內部 "接受消息->等待->處理" 的循環中,直到這個循環結束(比如傳入 quit 的消息),函數返回。

3.OSX/iOS 系統中,提供了兩個這樣的對象:NSRunLoop 和 CFRunLooPRef。

CFRunLoopRef 是 CoreFoundation框架的 提供了純C代碼的API,這些API是線程安全的

而NSRunloop是基于CFRunLoopRef的二次封裝,這些API不是線程安全的

4.Runloop不能自己創建,但是可以在線程中獲得(主線程自動開啟RunLoop)

蘋果不允許直接創建 RunLoop,它只提供了兩個自動獲取的函數:CFRunLoopGetMain() 和 CFRunLoopGetCurrent()。

線程和 RunLoop 之間是一一對應的,其關系是保存在一個全局的 Dictionary 里。線程剛創建時并沒有 RunLoop,如果你不主動獲取,那它一直都不會有。RunLoop 的創建是發生在第一次獲取時,RunLoop 的銷毀是發生在線程結束時。你只能在一個線程的內部獲取其 RunLoop(主線程除外)。

每一個RunLoop對應一個線程。每一個線程都可以擁有一個RunLoop,這也就是說線程可以創建一個屬于自己的Runloop,也可以不創建自己的RunLoop。這都是根據程序內部的需求來決定的。這里需要注意的是:你創建一個runLoop但是你還必須要手動的讓其run。

5.runloop和定時器

NSTimer 其實就是 CFRunLoopTimerRef,他們之間是 toll-free bridged 的。一個 NSTimer 注冊到 RunLoop 后,RunLoop 會為其重復的時間點注冊好事件.

例如 10:00, 10:10, 10:20 這幾個時間點。RunLoop為了節省資源,并不會在非常準確的時間點回調這個Timer。Timer 有個屬性叫做 Tolerance (寬容度),標示了當時間點到后,容許有多少最大誤差。

如果某個時間點被錯過了,例如執行了一個很長的任務,則那個時間點的回調也會跳過去,不會延后執行。就比如等公交,如果 10:10 時我忙著玩手機錯過了那個點的公交,那我只能等 10:20 這一趟了。

CADisplayLink 是一個和屏幕刷新率一致的定時器(但實際實現原理更復雜,和 NSTimer 并不一樣,其內部實際是操作了一個 Source)。如果在兩次屏幕刷新之間執行了一個長任務,那其中就會有一幀被跳過去(和 NSTimer 相似),造成界面卡頓的感覺。在快速滑動TableView時,即使一幀的卡頓也會讓用戶有所察覺。Facebook 開源的 AsyncDisplayLink 就是為了解決界面卡頓的問題,其內部也用到了 RunLoop

6.PerformSelecter

當調用 NSObject 的 performSelecter:afterDelay: 后,實際上其內部會創建一個 Timer 并添加到當前線程的 RunLoop 中。所以如果當前線程沒有 RunLoop,則這個方法會失效。

當調用 performSelector:onThread: 時,實際上其會創建一個 Timer 加到對應的線程去,同樣的,如果對應線程沒有 RunLoop 該方法也會失效。

文章借鑒:http://www.cocoachina.com/ios/20150601/11970.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品视频在线观看免费| 日韩欧美福利视频| 91成人免费观看网站| 久久久久久久999| 国产精品日韩在线观看| 国产精品日韩欧美大师| 久久中文字幕视频| 国产成人亚洲综合91精品| 国产婷婷成人久久av免费高清| 亚洲男人av电影| 亚洲欧美精品中文字幕在线| 成人免费淫片视频软件| 国产精品久久久久影院日本| 尤物九九久久国产精品的分类| 欧美怡红院视频一区二区三区| 国产精品久久久久久久久久99| 久久精品视频免费播放| 色狠狠久久aa北条麻妃| 亚洲裸体xxxx| 岛国精品视频在线播放| 午夜精品理论片| 成人有码在线播放| 国产九九精品视频| 日韩在线中文字幕| 日韩激情第一页| 欧美xxxx18性欧美| 欧美午夜无遮挡| 91免费福利视频| 久久久久久网址| 狠狠色狠色综合曰曰| xvideos成人免费中文版| 性色av一区二区咪爱| 亚洲人午夜精品免费| 亚洲国产私拍精品国模在线观看| 成人免费自拍视频| 91精品在线观| 69久久夜色精品国产7777| 久久免费观看视频| 久久av.com| 精品国产乱码久久久久久天美| 国产精品一区二区三区成人| 亚洲欧美激情视频| 国产精品视频一区二区三区四| 久久久久久久久综合| 精品中文字幕视频| 狠狠久久五月精品中文字幕| 亚洲精品福利免费在线观看| …久久精品99久久香蕉国产| 97精品免费视频| 久久视频精品在线| 高潮白浆女日韩av免费看| 久久成年人视频| 精品亚洲国产视频| 色偷偷av亚洲男人的天堂| 欧美激情一二区| 久久久精品美女| 77777少妇光屁股久久一区| 国产美女久久精品| 中文字幕亚洲字幕| 国产综合福利在线| 午夜免费在线观看精品视频| 韩剧1988免费观看全集| 精品少妇v888av| 97国产在线观看| 日韩综合视频在线观看| 成人黄色激情网| 欧美国产日韩xxxxx| 日韩乱码在线视频| 色伦专区97中文字幕| 97在线视频免费播放| 66m—66摸成人免费视频| 久久久国产精品免费| 亚洲欧洲成视频免费观看| 亚洲影视九九影院在线观看| 久久亚洲综合国产精品99麻豆精品福利| 成人在线免费观看视视频| 欧美极品少妇xxxxx| 久久久亚洲精品视频| 成人午夜小视频| 91在线观看免费网站| 成人免费xxxxx在线观看| 亚洲国产中文字幕在线观看| 国产一区二区日韩| 亚洲精品小视频在线观看| 成人福利在线观看| 精品国内自产拍在线观看| 精品电影在线观看| 精品国产户外野外| 中文字幕av一区二区| 欧美在线一区二区视频| 亚洲一区二区久久久久久| 日韩精品在线免费观看| 色综合久久中文字幕综合网小说| 一区二区三区视频免费在线观看| 国产精品久久婷婷六月丁香| 亚洲xxx自由成熟| 精品亚洲一区二区三区在线播放| 日韩精品一区二区视频| 亚洲人成网站在线播| 97**国产露脸精品国产| 在线日韩第一页| 国产精品福利在线| 日韩hd视频在线观看| 一区二区三区无码高清视频| 国产精品视频999| 国产又爽又黄的激情精品视频| 日韩精品高清视频| 欧美裸身视频免费观看| 日韩精品中文字幕视频在线| 精品久久久久久中文字幕| 国产欧美精品一区二区三区介绍| 亚洲精品一区二区三区婷婷月| 国产91精品黑色丝袜高跟鞋| 国产91精品久久久| 久久久精品久久久久| 韩国19禁主播vip福利视频| 国产精品久久久久久久电影| 国产丝袜精品第一页| 亚洲国产成人精品久久久国产成人一区| 国产婷婷成人久久av免费高清| 亚洲福利精品在线| 国产精品中文字幕在线| 欧美巨乳美女视频| 欧美激情小视频| 亚洲网站在线观看| 亚洲欧美国产精品va在线观看| 久久成人精品电影| 一区二区成人av| 久久久av一区| 日韩av在线免费观看一区| 日韩中文字幕免费| 国产亚洲精品va在线观看| 欧美大尺度激情区在线播放| 亚洲热线99精品视频| 日本一区二三区好的精华液| 日韩av成人在线| 国产91在线播放| 精品久久国产精品| 福利一区福利二区微拍刺激| 欧美专区中文字幕| 国产精品久久久久久五月尺| 精品小视频在线| 清纯唯美亚洲综合| 日本免费一区二区三区视频观看| 亚洲成人精品久久久| 日韩一级裸体免费视频| 久久韩剧网电视剧| 日韩精品免费观看| 国产一区二区三区免费视频| 久热精品视频在线观看| 国产精品一区二区三区成人| 成人a免费视频| 欧美孕妇毛茸茸xxxx| 久久久www成人免费精品| 欧美激情小视频| 国产免费一区二区三区在线能观看| 色青青草原桃花久久综合| 日韩在线观看免费全集电视剧网站| 一本久久综合亚洲鲁鲁| 成人疯狂猛交xxx| 91在线视频免费| 亚洲 日韩 国产第一| 成人av在线天堂| 亚洲天堂男人天堂女人天堂|