-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
detach和dispatch
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于detach和dispatch的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com
本文目錄:
一、divide和detach都有分開的意思 我們該怎么理解它們呢
分離(Detach):用于將群組中的個(gè)別對象從群組中分離出去。divide劃分;除;分開;使產(chǎn)生分歧
二、remove和detach的區(qū)別
remove:(綁定事件被移除)
remove是不會(huì)把匹配的元素從jquery對象上刪除,所以在后面如果再添加該元素的話是可以繼續(xù)使用的,但是該元素綁定的事件、附加的數(shù)據(jù)都會(huì)被移出掉,添加元素后也不能再擁有
detach:(綁定事件不會(huì)被移除)
detach是不會(huì)把沛沛的元素從jquery對象上刪除,所以在后面添加該元素的話是可以繼續(xù)使用的,同樣的該元素綁定的事件和附加的元素都沒有被刪除,當(dāng)元素添加回來之后,綁定的事件是可以繼續(xù)使用的,同理還有附加的數(shù)據(jù)
區(qū)別:
都是移出dom結(jié)構(gòu),但是綁定的事件和附件的數(shù)據(jù)會(huì)有差別,這里要區(qū)別對待。
三、android remove和detach的區(qū)別
有如下的區(qū)別:
可以看到Fragment比Activity多了幾個(gè)額外的生命周期回調(diào)函數(shù):
onAttach(Activity);//當(dāng)Activity與Fragment發(fā)生關(guān)聯(lián)時(shí)調(diào)用
onCreateView(LayoutInflater,ViewGroup,Bundle);//創(chuàng)建該Fragment的視圖
onActivityCreate(bundle);//當(dāng)Activity的onCreate();方法返回時(shí)調(diào)用
onDestoryView();//與onCreateView相對應(yīng),當(dāng)改Fragment被移除時(shí)調(diào)用
onDetach();//與onAttach()相對應(yīng),當(dāng)Fragment與Activity的關(guān)聯(lián)被取消時(shí)調(diào)用
注意:除了onCreateView,其他的所有方法如果你重寫了,必須調(diào)用父類對于該方法的實(shí)現(xiàn)。
四、C++中的std:thread的join函數(shù)與detach函數(shù)有什么區(qū)別
C++中的thread對象通常來說表達(dá)了執(zhí)行的線程(thread of execution),這是一個(gè)OS或者平臺(tái)的概念。
當(dāng)thread::join()函數(shù)被調(diào)用后,調(diào)用它的線程會(huì)被block,直到線程的執(zhí)行被完成?;旧?,這是一種可以用來知道一個(gè)線程已結(jié)束的機(jī)制。當(dāng)thread::join()返回時(shí),OS的執(zhí)行的線程已經(jīng)完成,C++線程對象可以被銷毀。
當(dāng)thread::detach()函數(shù)被調(diào)用后,執(zhí)行的線程從線程對象中被分離,已不再被一個(gè)線程對象所表達(dá)--這是兩個(gè)獨(dú)立的事情。C++線程對象可以被銷毀,同時(shí)OS執(zhí)行的線程可以繼續(xù)。如果程序想要知道執(zhí)行的線程何時(shí)結(jié)束,就需要一些其它的機(jī)制。join()函數(shù)在那個(gè)thread對象上不能再被調(diào)用,因?yàn)樗呀?jīng)不再和一個(gè)執(zhí)行的線程相關(guān)聯(lián)。
去銷毀一個(gè)仍然可以“joinable”的C++線程對象會(huì)被認(rèn)為是一種錯(cuò)誤。為了銷毀一個(gè)C++線程對象,約么join()函數(shù)需要被調(diào)用(并結(jié)束),要么detach()函數(shù)被調(diào)用。如果一個(gè)C++線程對象當(dāng)銷毀時(shí)仍然可以被join,異常會(huì)被拋出。
C++線程對象不被表達(dá)為執(zhí)行的線程的其它的情況(也就是unjoinable):
默認(rèn)構(gòu)造的線程對象不表達(dá)為執(zhí)行的線程,所以是unjoinable。
被移開的線程將不表達(dá)為執(zhí)行的線程,所以是unjoinable。
在std::thread的析構(gòu)函數(shù)中,std::terminate會(huì)被調(diào)用如果:
線程沒有被Joined(用t.join())
線程也沒有被detached(用t.detach())
因此,你應(yīng)該在執(zhí)行流程到析構(gòu)函數(shù)前總是要么join,要么detach一個(gè)線程。
當(dāng)一個(gè)程序終止時(shí)(比如main返回),剩下的在后臺(tái)的detached線程執(zhí)行不會(huì)再等待;相反它們的執(zhí)行會(huì)被掛起并且它們的本地線程對象會(huì)被銷毀。
關(guān)鍵地,這意味著這些線程的棧不是完好無損的,因此一些析構(gòu)函數(shù)不會(huì)被執(zhí)行。依賴于這些行為,一些析構(gòu)函數(shù)假象會(huì)被承擔(dān),這可能是一種壞情形,好像程序已經(jīng)Crash或者已經(jīng)被kill。希望OS會(huì)釋放加在這些文件上的鎖。Depending
on the actions those destructors were supposed to undertake, this might
be as bad a situation as
if the program had crashed or had been killed. Hopefully the OS will
release the locks on files, etc... but you could have corrupted shared
memory, half-written files, and the like.
所以,你應(yīng)該使用join還是detached?
使用join
除非你需要更靈活并且想要獨(dú)立地提供一種同步機(jī)制來等待線程完成,在這種情況下你應(yīng)該使用detach
以上就是關(guān)于detach和dispatch相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
vscode安裝導(dǎo)入本地插件包(vscode導(dǎo)入已下載好的插件包)
華為retaildemo(華為retaildemo下載安裝教程)
campus-wide(campus-wide discussion)
包頭專業(yè)住宅景觀設(shè)計(jì)(包頭專業(yè)住宅景觀設(shè)計(jì)師招聘)