本文總結(jié)與runloop相關(guān)的知識(shí)點(diǎn)。從以下幾個(gè)方面去分析runloop:
- runloop是什么?有什么作用
- runloop內(nèi)有哪些事件
- runloop與線(xiàn)程的關(guān)系
- runloop的應(yīng)用
runloop是什么?有什么作用
runloop是什么
答:runloop是一個(gè)對(duì)象
在Foundation框架中,runloop是一個(gè)NSRunloop對(duì)象
在CoreFoundation框架中,runloop是一個(gè)__CFRunloop結(jié)構(gòu)體
runloop有什么作用
剛才說(shuō)了,runloop是一個(gè)對(duì)象,這個(gè)對(duì)象提供了什么作用呢?
- 作用一:提供了一個(gè)函數(shù)入口,使得程序不會(huì)主動(dòng)退出。
都說(shuō)runloop是一個(gè)運(yùn)行循環(huán),那么問(wèn)題來(lái)了:我們?nèi)绾悟?yàn)證?
我們先來(lái)看文檔:
WeChatabfcacca345bdba5516fa6f4cf3ddbca.png
翻譯如下:
**RunLoop對(duì)象處理來(lái)自窗口系統(tǒng)、端口對(duì)象和NSConnection對(duì)象的鼠標(biāo)和鍵盤(pán)事件等源的輸入。RunLoop對(duì)象還處理計(jì)時(shí)器事件。
您的應(yīng)用程序既不創(chuàng)建也不顯式地管理RunLoop對(duì)象。每個(gè)線(xiàn)程對(duì)象(包括應(yīng)用程序的主線(xiàn)程)都有一個(gè)RunLoop對(duì)象,根據(jù)需要自動(dòng)為其創(chuàng)建。如果需要訪(fǎng)問(wèn)當(dāng)前線(xiàn)程的運(yùn)行循環(huán),可以使用類(lèi)方法current來(lái)訪(fǎng)問(wèn)。
注意,從RunLoop的角度來(lái)看,計(jì)時(shí)器對(duì)象不是“輸入”——它們是一種特殊類(lèi)型,這意味著它們?cè)谟|發(fā)時(shí)不會(huì)導(dǎo)致run循環(huán)返回。**
這里似乎沒(méi)有說(shuō)runloop使得程序不會(huì)主動(dòng)退出。
我們換一種思路:它是從什么時(shí)候執(zhí)行的入口函數(shù)呢?
答案顯而易見(jiàn):main函數(shù)
因?yàn)槌绦虻娜肟诰褪莔ain函數(shù),既然提供了運(yùn)行循環(huán),肯定是從一開(kāi)始就執(zhí)行了入口函數(shù)。
翻譯如下:
創(chuàng)建應(yīng)用程序?qū)ο蠛蛻?yīng)用程序委托,并設(shè)置事件循環(huán)
這是UIApplicationMain函數(shù)做的事情。
如果我們不執(zhí)行這個(gè)函數(shù)呢?
boom!!
程序一運(yùn)行就結(jié)束了。這個(gè)結(jié)果也很符合正常的邏輯。
結(jié)論:我們的應(yīng)用程序,通過(guò)UIApplicationMain函數(shù),設(shè)置了運(yùn)行循環(huán),使得程序不會(huì)主動(dòng)退出
- 作用二: