IOS多線程之線程屬性的配置


版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
 
設置線程堆棧的大小:
系統為每個你新創建的線程,都會為你的進程空間分配一定的內存作為該線程的堆棧。這里面有我們局部變量聲明我們的方法就是一個堆棧。
 
如果你想改變一個給定線程的堆棧大小,你必須在創建該線程之前做一些操作。幾乎所有線程技術都提供了相應的方法來設置堆棧的大小。
 
例如NSThread設置堆棧大小:
在IOS和MAC OS 10.5之后,創建初始化一個NSThread最好不要用雷類方法創建(detachNewThreadSelector:toTarget:withObject: ),因為我們要設置線程的堆棧大小,我們調用start方法之前用setStackSize:方法來設置。
 
設置線程並存儲一些信息:
我們如果想讓線程存儲這個線特有的信息以便在方面的時候用到他並且可以在線程之間傳遞信息。比如我們之前說過的run loop處理事件。可以存儲處理了多少次事件的次數。
NSThread的 threadDictionary方法返回一個NSMutableDictionary對象。我們可以在里面存儲線程的一些信息。
 
線程的脫離狀態:
有時候我們中斷一個線程時候希望回收他的資源,脫離線程可以做到。與之相反的是可連接線程,他必須在推出之前必須被其他線程連接,並且可以拿到退出線程的數據。
大部分的上層線程技術默認是創建脫離線程。因為他們在線程完成時候立刻釋放回收資源。
注意:當線程處於周期性工作而不被中斷的時候比如保存數據到硬盤,可連接線程是最佳選擇。
 
設置線程的優先級:
試想這樣一個情況一個線程池里面有很多的線程。每個線程被創建的時候等級是一樣的。我們假如想讓某個線程先被執行可以設置這個線程的優先級高於其他線程,這樣他會被先執行。
NSThread可以 setThreadPriority方法設置當前運行線程的優先級
 
設置自動釋放池:
之前我們說過在線程執行的一個方法里面可以設置run loop來處理事件並且可以用一個自動釋放池來清理線程代碼執行后的東西。
 
IOS在他們的每個線程必須創建至少一個自動釋放池。主線程默認就創建了。有自動回收機制的應用創建自動釋放池也不是必須的,只是他們被忽略掉。
 
因此我們在編寫線程主體入口的時候要先創建一個自動釋放池。在線程結束的時候自動釋放他。例如一個循環我們應該每次循環一次創建並釋放該自動釋放池。我們可以用這樣的方法來防止我們應用程序內存占用太造成的性能問題。
 
設置異常處理:
之前提到過如果一個線程的異常未捕獲,可能造成你的應用強制退出因為其他的線程也不能捕獲,因此我們最好在線程的主體入口寫一個捕獲線程異常的函數 try/catch,用來捕獲任何位置的異常。
 
設置run loop
當一個編寫一個線程時候,我們可以讓他執行一個長期的操作很少中斷,線程完成時候退出。也可以讓我們的線程放入一個循環里面,讓他動態處理操作。后面這種做法就類似在線程里面加入一個run loop。你的主線程默認啟動一個run loop。但是你創建自己的線程需要自己添加啟動。后面我們會詳細介紹。
中斷線程:
我們退出一個線程推薦方法是讓他在主體入口正常的退出。雖然系統API提供了直接殺死線程的方法,但是這樣做會阻止線程清理內存等工作。會造成潛在的問題之前也說了。
因此我們可以設置我們線程響應取消或者退出消息。對於長時間的操作,這意味着要周期性來檢查這個消息是不是到來,這樣線程有機會來清理完成最終退出。我們可以用run loop的輸入源來檢測這個消息的到來。具體后面會詳細介紹。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM