iOS性能優(yōu)化一(先了解線程,棧,堆)

之前簡書記錄一點之前遇到的小問題和開發(fā)中新功能,現(xiàn)在感覺沒有太多的東西去參考了.只能根據(jù)書本去優(yōu)化優(yōu)化性能

當iOS程序猿開發(fā)過5個以上的項目,自己就開始琢磨如何能優(yōu)化代碼,讓別人看著好看,可讀性更高,使用的app如何順暢,不卡頓,延時少那等等這些問題其實都是性能相關的問題。

4.1了解線程

線程是運行時執(zhí)行的一組指令序列。

每個進程至少應包含一個線程。在iOS中,進程啟動時的主要線程通常被稱作主線程。所有的UI元素都需要在主線程中創(chuàng)建和管理。與用戶交互相關的所有中斷最終都會分發(fā)到UI線程,處理代碼會在這些地方執(zhí)行— IBAction方法的代碼都會在主線程中執(zhí)行。Cocoa編程不允許其他線程更新UI元素。這意味著,無論何時應用在后臺線程執(zhí)行了耗時操作,比如網(wǎng)絡或其他處理,代碼都必須將上下文切換到主線程再更新UI例如,進度條指示任務進度或標簽展示處理結果。

4.2.1內核數(shù)據(jù)結構

每個線程大約消耗1KB的內核內存空間。這塊內存用于存儲與線程有關的數(shù)據(jù)結構和屬性。這塊內存是聯(lián)動內存( wired memory),無法被分頁。

4.2.2主線程的??臻g大小為1M,而且無法修改。所有的二級線程默認分配512KB的??臻g。棧空間 注意,完整的棧并不會立即被創(chuàng)建出來。實際的棧空間大小會隨著使用而增長。因此,即使主線程有1MB的棧空間,某個時間點的實際??臻g很可能要小很多。在線程啟動前,??臻g的大小可以被改變。??臻g的最小值是16KB,而且其數(shù)值必42.3創(chuàng)建耗時

我們在 iPhone6 Plus ios8.4上進行了一項快速測試,展示了線程創(chuàng)建的耗時(不包含啟動時間),其區(qū)間范圍在4000~500微秒,即4~5毫秒。

創(chuàng)建線程后啟動線程的耗時區(qū)間為5~100毫秒,平均大約在29毫秒。這是很大的時間開銷,若在應用啟動時開啟多個線程,則尤為明顯線程的啟動時間之所以如此之長,是因為多次的上下文切換所帶來的開銷。

在??臻g進行的(自動編譯),然后放入到堆空間,一個手機運行內存1G,當前app最大可以是512MB運行內存,棧空間剛才說了主線程??臻g1MB,當我給指針對應的屬性賦值的時候,指針根據(jù)二進制分配空間然后放入堆空間,下次運行直接時堆空間,如果手動更改指針對應的屬性值。??臻g計算好大小替換堆空間之前的內存地址.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容