付費下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】iOS使用多線程提高數(shù)據(jù)并發(fā)訪問之十
線程的可選方案有時候,你不想繼承threads或不想自己創(chuàng)建和管理單獨的線程。例如,你想要一個定時器每2秒鐘調(diào)用你的方法,你可能會寫一個線程一直循環(huán),然后睡眠2秒,然后調(diào)用你的方法?;蛘吣憧赡芟胍獙懘a處理異步請求,比如從網(wǎng)絡(luò)上下載文件。或者當(dāng)你的iPhone空閑時,你想要繼續(xù)進(jìn)行重量級的計算處理。這些都不太容易實現(xiàn)或者可能會降低性能。我會討論一些解決的辦法。NSTimerNSTimer并不承諾會很精確;如果你設(shè)置每0.5秒觸發(fā)一次,實際上定時器觸發(fā)的時間可能在0.55和0.6秒之間。但是,如果你只是想相對準(zhǔn)確的執(zhí)行周期性任務(wù)的話,這是一個很好的機制。重復(fù)和非重復(fù)NSTimer比較你可以執(zhí)行重復(fù)或非重復(fù)的定時器。對于重復(fù)的定時器來說,定時器會在你指定的時間間隔內(nèi)觸發(fā),不會停止。如果你想停止的話,你需要手工的使定時器無效。對于非重復(fù)定時器來說,它只會觸發(fā)一次,然后會自動的變?yōu)闊o效。對這兩種情況,一旦定時器無效了,你不能在重用它;你必須重新創(chuàng)建一個定時器對象。要創(chuàng)建一個定時器,你可以使用:+scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:或使用:+timerWithTimeInterval:target:selector:userInfo:repeats:第一種方法會創(chuàng)建一個新的定時器,然后添加到當(dāng)前的runloop中,然后返回定時器對象給你。第二種方法僅僅創(chuàng)建一個定時器對象;你需要自己通過調(diào)用[aTimeraddTimer:forMethod]來添加到你自己的runloop中。當(dāng)時候重復(fù)定時器時,如果你要使定時器變成無效的話,你需要調(diào)用方法:[aTimerinvalidate];注意:在一個沒有runloop的線程中,NSTimer是不能工作的。異步函數(shù)在很多情況下,異步函數(shù)比線程更輕量級。例如,iPhone環(huán)境能夠從線程池中重用線程來處理異步函數(shù)。更進(jìn)一步,如果你需要處理100個異步函數(shù),OS可能只需要10個線程,因為一個線程能夠處理多個異步函數(shù)。唯一的問題就是,它比你創(chuàng)建一些線程和一個異步請求來處理他們看起來更復(fù)雜。Listing6-9代碼塊創(chuàng)建了一個異步請求到服務(wù)器上,然后合并返回的結(jié)果創(chuàng)建一個數(shù)據(jù)對象。相比,使用簡單的線程和異步函數(shù)處理方案:@autoreleasepool{
NSData*p_w_picpathData=[NSDatadataWithContentsOfURL:p_w_picpathURL];}在某些情況下,你可能需要寫更多的代碼來獲得更好的性能。你僅僅需要確保實際上做的什么將對你有利。如果你使用異步HTTP請求,你需要運行在一個后臺線程中。如果很長一段時間都沒有響應(yīng),iOS的策略可能會殺掉你的應(yīng)用。這會使得你的應(yīng)用給別人一個不好的印象。注意:如果你同時有很多HTTP調(diào)用,你應(yīng)該考慮創(chuàng)建一個單獨的線程來處理異步調(diào)用,從而避免在主線程上調(diào)用沖突。Idle-TimeNotifications空閑通知有些事情你只想在系統(tǒng)空閑的時候做。例如,你想要從iPhone發(fā)送反饋到服務(wù)器上,而你又不想在其他處理正在進(jìn)行或其他用戶正在和設(shè)備交互的時候發(fā)送。你只想在用戶或設(shè)備沒事可做的時候發(fā)送。如果是你自己的話,這確實是一個很難的事情。不過高興的是,蘋果已經(jīng)提供了一個函數(shù)來處理了。你可以通過NSNotificationQueue使用NSPostWhenIdle類型來post一個通知,像下面的代碼:你可以看到,它就像使用NSNotificationCenter那樣來使用;你添加一個對象和方法作為觀察者和selector。然后你可以post一個新的通知到隊列中,這樣方法就會在系統(tǒng)空閑的時候進(jìn)行處理。iPhone線程測試線程的測試在第二章已經(jīng)討論過了,所以圖6-13只是一個簡單的溫習(xí)。這個測試并沒有提供太多的信息,除了應(yīng)用中當(dāng)前線程的狀態(tài)。這個能夠幫助你了解系統(tǒng)是否因為使用太多線程導(dǎo)致負(fù)荷過重,或線程掛起和等待太長時間,這是死鎖的一個征兆??偨Y(jié)在本章,你學(xué)到了如何使用多線程來提升你應(yīng)用的性能。概念實際上是非常簡單的:你創(chuàng)建一個新的線程來處理一些計算。但是,為了使得你的應(yīng)用正確和安全的運行,你需要注意很多細(xì)節(jié)。你同樣需要知道cpu密集型任務(wù)和IO密集
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)職業(yè)經(jīng)理人考試營養(yǎng)與食品安全知識與試題答案
- 2025年考研西醫(yī)綜合真題答案及解析大
- 電大土木工程本科《工程地質(zhì)》在線形考(作業(yè)1至4)試題及答案
- 醫(yī)學(xué)人文考試試題及答案
- 2026字節(jié)跳動校招試題及答案
- 初級園林綠化試題及答案
- 2026黑龍江農(nóng)業(yè)職業(yè)技術(shù)學(xué)院公開招聘博士3人參考題庫附答案
- 中國火箭公司2026校園招聘考試備考題庫附答案
- 北京市公安局輔警崗位招聘300人備考題庫附答案
- 吉安市2025年度市直事業(yè)單位公開選調(diào)工作人員【70人】備考題庫必考題
- 甲狀腺乳腺外科診療規(guī)范
- 退換貨方案及措施
- 麻醉科常用耗材分類與管理要點
- 材料力學(xué)性能檢驗工安全教育培訓(xùn)手冊
- 小說影視化改編的深度解析
- JJF 2214-2025 機動車檢測用氣象單元校準(zhǔn)規(guī)范
- 嚴(yán)格招標(biāo)需求管理制度
- 外科洗手操作標(biāo)準(zhǔn)與流程
- 2024年注會考試《財務(wù)管理》真題及答案
- 種植樹木協(xié)議合同協(xié)議
- 2024~2025學(xué)年安徽省銅陵市銅官區(qū)第一學(xué)期期末質(zhì)量監(jiān)測 八年級英語試卷(含答案無聽力原文及音頻)
評論
0/150
提交評論