1、UIView同時設(shè)置touchHandler&GR(僅考慮單擊事件)哮伟,調(diào)用順序是什么干花?
iOS 事件分為三大類
觸摸事件
加速器事件
遠程控制事件
觸摸事件是我們平時遇到最多的事件妄帘,例如單擊、長按池凄、滑動等等抡驼。當(dāng)用戶點擊按鈕,到按鈕處理回調(diào)肿仑。整個過程是如何發(fā)生致盟,需要什么樣的原則,這些都是問題尤慰。為了使系統(tǒng)能更加鮮明符合用戶的操作邏輯馏锡,iOS系統(tǒng)將事件相應(yīng)過程拆分成兩部分:1.尋找響應(yīng)鏈;2.事件響應(yīng)伟端。先將事件通過某種規(guī)則來分發(fā)杯道,找到處理事件的控件。其次是將事件傳遞分發(fā),響應(yīng)责蝠。
2党巾、進程和線程:
進程:
就是進行中的程序(一組指令的有序集合),當(dāng)一個程序被加載到內(nèi)存中之后就變成了進程(進程=程序+執(zhí)行)霜医。進程有獨立的地址空間齿拂,在保護模式下自己出了問題不會對其他進程產(chǎn)生影響。進程是操作系統(tǒng)分配資源的基本單位肴敛。 進程的三種狀態(tài):
- 阻塞態(tài):等待某個事件的完成
- 就緒態(tài):等待系統(tǒng)分配CPU以便運行
- 執(zhí)行態(tài):占有CPU正在運行
線程:
是進程的一個實體署海,是CPU調(diào)度和分派的基本單位,自己擁有一點運行必不可少的資源(如程序計數(shù)器医男、一組寄存器和堆棧)與同屬進程的其他線程共享進程的擁有的全部資源砸狞。
- 進程是cpu資源分配的最小單位,線程是cpu調(diào)度的最小單位昨登。
- 一個程序至少有一個進程趾代,一個進程至少有一個線程贯底。線程依賴于進程才能運行
- 線程本身擁有很少資源(線程標(biāo)識符丰辣、程序計數(shù)器、一組寄存器的值禽捆、堆棧)笙什,與同屬進程的其他線程共享進程擁有的資源(代碼段、數(shù)據(jù)段胚想、打開的文件琐凭、I/O設(shè)備等)。
- 線程開銷小浊服,但一個線程死掉等于整個進程死掉统屈,不利于資源管理和保護胚吁。而進程正好相反,開銷大愁憔,但相對線程安全腕扶。
線程對操作系統(tǒng)來說就是一段代碼+運行時數(shù)據(jù)(主要是寄存器數(shù)據(jù),還有線程中與資源相關(guān)的數(shù)據(jù)吨掌,比如打開的文件句柄)半抱。多線程實現(xiàn)主要是靠硬件CPU(中央處理器)件來實現(xiàn)的,CPU有一個很重要的特性時間片膜宋,每一段獲得CPU的代碼只能運行一個時間片限定的時間窿侈,時間到后CPU就會把正在運行的代碼暫停,接著發(fā)生一個中斷秋茫,然后按照一定的規(guī)則選擇另一段代碼獲得CPU來運行史简。
時間片設(shè)得太短會導(dǎo)致過多的進程切換,降低了CPU效率肛著;而設(shè)得太長又可能引起對短的交互請求的響應(yīng)變差夹攒。將時間片設(shè)為100毫秒通常是一個比較合理的折衷。
線程多了汗销,可以提高程序的執(zhí)行效率跟束,但并不是越多越好。
雖然線程本身擁有很少的資源(在iOS中萨咕,默認主線程1M统抬,子線程512K),但是更多的線程意味著更多的內(nèi)存開銷危队。創(chuàng)建線程也是需要CPU開銷的聪建。
如果線程比核的數(shù)量多,則同一時間只能執(zhí)行與核數(shù)量相等的線程數(shù)茫陆,線程過多會導(dǎo)致頻繁的切換金麸,消耗過多的CPU時間,降低了程序性能簿盅。
使用多線程就可能出現(xiàn)線程安全問題挥下,為了解決線程安全需要使用鎖,進而可能會出現(xiàn)死鎖問題桨醋。過多的線程會增加程序設(shè)計的復(fù)雜性棚瘟,浪費更多精力去處理多線程通信和數(shù)據(jù)共享(多線程安全、多線程死鎖)喜最。