下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】iOS使用多線程提高數(shù)據(jù)并發(fā)訪問之三
如何編寫多線程應(yīng)用現(xiàn)在你已經(jīng)知道一個好的多線程應(yīng)用是怎樣的,它是如何幫助你解決問題的,那么如何編寫一個好的多線程應(yīng)用呢?我會向你介紹iPhone應(yīng)用中編寫和處理多線程應(yīng)用的主要技術(shù)。創(chuàng)建一個線程為了創(chuàng)建一個線程,你可以使用下面的方法:NSThreadPOSIXThreadsNSObject來創(chuàng)建一個新的線程N(yùn)SOperation和NSOperationQueue我會逐一介紹他們,然后會舉一些例子,因?yàn)樗麄兌加懈髯缘膬?yōu)點(diǎn)和缺點(diǎn)。在本部分結(jié)束的時候,我會給出一個表格來進(jìn)行對比,是得你能夠分清他們的不同,這樣在你的需求中就能夠選擇一個正確的方案。NSThread用NSThread創(chuàng)建一個新的線程,你可以簡單的調(diào)用:[NSThreaddetachNewThreadSelector:@selector(threadMethod:)toTarget:selfwithObject:nil];這個方法會在你的應(yīng)用中創(chuàng)建一個新的detached線程。一個detached線程就是它的所有資源會被系統(tǒng)回收,當(dāng)線程存在的時候。有些屬性你需要知道。+(void)detachNewThreadSelector:(SEL)aSelectortoTarget:(id)aTargetwithObject:(id)anArgumentaSelector:當(dāng)線程開始的時候,這個方法會在目標(biāo)對象中被調(diào)用。根據(jù)蘋果的文檔,這個selector只有一個參數(shù),沒有返回值。aTarget:將要執(zhí)行在aSelector參數(shù)中所指定的方法的對象。anArgument:唯一的一個參數(shù);當(dāng)線程開始的時候,它會被傳遞到aSelector方法中。如果你想創(chuàng)建一個線程,但是不想啟動它,你可以使用下面的機(jī)制:NSThread*myThread=[[NSThreadalloc]initWithTarget:selfselector:@selector(myThreadMainMethod:)object:nil];[myThreadstart];//Actuallycreatethethread你可以看到,第一行,你創(chuàng)建了一個新的線程,然后,根據(jù)你的選擇,你可以在對象上調(diào)用start來啟動一個新的線程。這是非常有用的,如果你只想傳遞myThread對象,而不想傳遞selector,target和argument的話。另一個比較好的做法是,使用NSThread對象發(fā)送一個消息給線程對象-(void)performSelector:(SEL)aSelectoronThread:(NSThread*)thrwithObject:(id)argwaitUntilDone:(BOOL)wait這個方法會在另一個線程上queueselector。當(dāng)系統(tǒng)自動運(yùn)行線程時,線程會dequeue這個消息,然后會調(diào)用aSelector變量指定的方法。使用POSIX線程這個在iPhone應(yīng)用中主要是用c編程時會用到。在第9章,我會更深入的討論c編程,并能夠幫助你在很多情況下提升你的iPhoneapps的性能。所以這個部分可能不會幫助你太多,如果你還不了解c編程的話。如果你已經(jīng)了解了c編程,Listing6-3展示了代碼,后面會有一個解釋。Listing6–3.POSIXThread#include<assert.h>#include<pthread.h>void*ThreadMethod(void*data){
//Yourmainlogiccomeshere.
returnNULL;}voidLaunchThread(){
//CreatethethreadusingPOSIXroutines.
pthread_attr_tattr;
pthread_tposixThreadID;
intreturnVal;
//initandcheckifinitanewthreadsuccessful
returnVal=
pthread_attr_init(&attr);
assert(!returnVal);
//setattributedetachstatefornewthread
returnVal=pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
assert(!returnVal);
//createandrunthenewthread
intthreadError=pthread_create(&posixThreadID,&attr,&ThreadMethod,NULL);
returnVal=pthread_attr_destroy(&attr);
assert(!returnVal);
if(threadError!=0)
{
//Reportanerror.
}}NSObject所有的對象都可以創(chuàng)建和detach一個新的線程來執(zhí)行這些對象的selectors。你可以使用下面的這行代碼在后臺線程中運(yùn)行doSomething方法:[myObjperformSelectorInBackground:@selector(doSomething)withObject:nil];調(diào)用這個方法的效果和下面的這行代碼是一樣的:[NSThreaddetachNewThreadSelector:@selector(doSomething)toTarget:myObjwithObject:nil]這個方法是比較好的,對于detach和創(chuàng)建一個運(yùn)行后臺任務(wù)的線程來說。NSOperationQueueNSOperationQueue是管理和運(yùn)行并發(fā)任務(wù)的一個機(jī)制。NSOperationQueue的一個好處是它能夠限制系統(tǒng)內(nèi)部并發(fā)operations的數(shù)量,通過給定一個限制使得系統(tǒng)加載在一個可以接受的范圍水平。因?yàn)檫@個最大線程數(shù)量的限制,如果有更多的線程實(shí)例,NSOperationQueue不會導(dǎo)致更多的并發(fā)線程同時在系統(tǒng)中運(yùn)行。你可以在queue中添加operations,但是不能刪除。然而,你可以在queue中取消所有已經(jīng)存在的和還沒有運(yùn)行的operations。表格6-2展示了當(dāng)使用NSOperationQueue時,一些非常有用的方法。你可以用3個不同的類來使用NSOperationQueue。NSInvocationOperation:如果你已經(jīng)有一個對象和一個方法加入到一個并發(fā)線程中,這只是一個簡單的包裹。它不需要子類,所以通過這個類來創(chuàng)建一個簡單的NSOperation對象。NSInvocationOperation是NSOperation的子類。NSBlockOperation:這是另一包裹類,用來執(zhí)行一個或多個blocks,而不需要創(chuàng)建一個單獨(dú)的NSOperation對象來執(zhí)行每一個block。當(dāng)執(zhí)行超過一個block時,只有所有內(nèi)部的blocks都執(zhí)行完畢,那么NSBlockOperation才被認(rèn)為結(jié)束了。CustomNSOperation:NSOperation是一個基類。通過繼承它,你能夠完全的控制整個NSOperation對象的實(shí)現(xiàn),包括你的operation執(zhí)行說的默認(rèn)行為和報(bào)告它的狀態(tài)。使用NSOperationQueue進(jìn)行多線程設(shè)計(jì),你需要用這3個方法中的一個來創(chuàng)建指定的對象,然后把新創(chuàng)建的NSOperation加入到你的queue中。然后這個queue會為你維護(hù)和運(yùn)行這些operations。這里有一個簡單的代碼來幫助你創(chuàng)建一個NSOperationQueue,然后把相互獨(dú)立的operation對象放進(jìn)去,來創(chuàng)建一個多線程環(huán)境:NSOperationQueue*myOperationQueue=[[NSOperationQueuealloc]init];[myOperationQueueaddOperation:myOpe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣西自然資源職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024歷年頻考點(diǎn)試題含答案解析
- 暗物質(zhì)與黑洞關(guān)系解析-深度研究
- 2025年廣州珠江職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 區(qū)塊鏈技術(shù)在計(jì)算機(jī)歷史中的創(chuàng)新應(yīng)用-深度研究
- 2025年廣東交通職業(yè)技術(shù)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點(diǎn)含答案解析
- 2025年川南幼兒師范高等??茖W(xué)校高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 考慮制造商過度自信的雙渠道閉環(huán)供應(yīng)鏈回收模式選擇及協(xié)調(diào)研究
- 廠房吊車梁施工方案
- 磚混結(jié)構(gòu)住宅施工方案
- 玩具店施工方案
- DL-T-1642-2016環(huán)形混凝土電桿用腳扣
- 平安產(chǎn)險陜西省地方財(cái)政生豬價格保險條款
- 銅礦成礦作用與地質(zhì)環(huán)境分析
- 30題紀(jì)檢監(jiān)察位崗位常見面試問題含HR問題考察點(diǎn)及參考回答
- 詢價函模板(非常詳盡)
- 《AI營銷畫布:數(shù)字化營銷的落地與實(shí)戰(zhàn)》
- 麻醉藥品、精神藥品、放射性藥品、醫(yī)療用毒性藥品及藥品類易制毒化學(xué)品等特殊管理藥品的使用與管理規(guī)章制度
- 一個28歲的漂亮小媳婦在某公司打工-被老板看上之后
- 乘務(wù)培訓(xùn)4有限時間水上迫降
- 2023年低年級寫話教學(xué)評語方法(五篇)
- DB22T 1655-2012結(jié)直腸外科術(shù)前腸道準(zhǔn)備技術(shù)要求
評論
0/150
提交評論