創(chuàng)建一個(gè)UI Button,當(dāng)用戶點(diǎn)擊的時(shí)候,主線程會(huì)響應(yīng)及處理點(diǎn)擊事件,這里是執(zhí)行handleButtonAction方法。handleButtonAction方法發(fā)起了一個(gè)網(wǎng)絡(luò)請(qǐng)求下載圖片。必然的,這是一個(gè)耗時(shí)的操作。
我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、南昌ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的南昌網(wǎng)站制作公司
沒有所謂好不好,在其他線程更新UI最終還是轉(zhuǎn)變?yōu)樵赨I線程里更新,因?yàn)閁I線程是主線程,其他線程想直接操作UI是不行的,可以借助Handler and message機(jī)制。
在子線程中更新UI:由于安卓更新UI元素必須在主線程中,否則就會(huì)出現(xiàn)異常。有時(shí)候我們必須在子線程里去執(zhí)行一些耗時(shí)任務(wù),然后根據(jù)任務(wù)的執(zhí)行結(jié)果來更新相應(yīng)的UI控件,比如:執(zhí)行網(wǎng)絡(luò)請(qǐng)求,需要將傳回的數(shù)據(jù)更新到UI上。
我們常常聽到這么一句話:更新UI要在UI線程(或者說主線程)中去更新,不要在子線程中更新UI,而Androidguan 方也建議我們不要在非UI線程直接更新UI。
分類:隊(duì)列分為串行、并行、主隊(duì)列、全局隊(duì)列。任務(wù)的執(zhí)行是在線程上去執(zhí)行的。分為同步和異步。所以就可以分成:串行隊(duì)列同步執(zhí)行、串行隊(duì)列異步執(zhí)行、并行隊(duì)列同步執(zhí)行、并行隊(duì)列異步執(zhí)行。
分析: 這個(gè)案例沒有使用系統(tǒng)提供的串行或并行隊(duì)列,而是自己通過 dispatch_queue_create 函數(shù)創(chuàng)建了一個(gè) DISPATCH_QUEUE_SERIAL 的串行隊(duì)列。執(zhí)行任務(wù)1;遇到異步線程,將【任務(wù)同步線程、任務(wù)4】加入串行隊(duì)列中。
串行隊(duì)列實(shí)際上是單線程。第二幅圖中使用的并行隊(duì)列,當(dāng)block加到并行隊(duì)列中,不會(huì)等待正在執(zhí)行中的處理,而立即分發(fā)到可用線程中去執(zhí)行。所以block1在等待block2在其他線程中執(zhí)行完畢,然后才執(zhí)行block3。
造成主隊(duì)列的相互等待,并非主線程死鎖。死鎖,崩潰。原因與在主線程同步提交主隊(duì)列原因相同。由于串行隊(duì)列的相互等待造成死鎖。隊(duì)列改成并發(fā),可以正常執(zhí)行。上層業(yè)務(wù)異步獲取結(jié)果再調(diào)同步也會(huì)死鎖。
NSLock 是OC層封裝底層線程操作來實(shí)現(xiàn)的一種鎖,繼承NSLocking協(xié)議。不能迭代加鎖,如果發(fā)生兩次lock,而未unlock過,則會(huì)產(chǎn)生死鎖問題。
1、通過上圖我們可以了解當(dāng)主線程做了一次刪除操作的時(shí)候,我們需要將這個(gè)操作記錄下來,并且當(dāng)子線程需要操作的時(shí)候進(jìn)行一次主線程的刪除操作,這樣才能保證數(shù)據(jù)的正確性。
2、建子線程的時(shí)候把主線程中的數(shù)組作為lParam傳遞給子線程。
3、flag用臨界區(qū)保護(hù),這種方法除了在兩個(gè)線程同時(shí)入臨界區(qū)時(shí)以外,主線程不會(huì)被阻塞。當(dāng)然也可以用Event,子線程SetEvent,主線程定期WaitForSingleObject,把超時(shí)設(shè)為1。
進(jìn)入軟件的設(shè)置里,就可看到多線程設(shè)置的相關(guān)選項(xiàng)。
當(dāng)然也可以用Event,子線程SetEvent,主線程定期WaitForSingleObject,把超時(shí)設(shè)為1。如果子線程需要等待主線程的處理,就再加一個(gè)Event,子線程設(shè)置flag/觸發(fā)Event1之后等特第二個(gè)Event,主線程處理完畢后觸發(fā)第二個(gè)Event。
使用NSObject 使用NSObject直接就加入了對(duì)多線程的支持,允許對(duì)象的某個(gè)方法在后臺(tái)運(yùn)行。
網(wǎng)站標(biāo)題:ios開發(fā)輸出主線程 ios 主線程和主隊(duì)列
標(biāo)題鏈接:http://jinyejixie.com/article37/dgihipj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、ChatGPT、App設(shè)計(jì)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)