iOS優化筆記

2021-07-03 23:54:01 字數 2505 閱讀 9170

1、記憶體洩漏問題的解決

找出記憶體洩露的地方。

方法:

靜態分析:

這個簡單的分析**,比如宣告了變數沒有使用,重複初始化。

靜態分析出結果,不一定洩露。

動態分析:

然後,你就慢慢找吧

2、查詢和解決殭屍物件

類似動態優化

3、資源優化

3.1 優化。

png優化,使用pngcrush工具。可以壓縮40%作用,xcode已經整合,也預設開啟了。

經驗:如果在本地資源情況下,我們應該優先使用png格式檔案;如果資源**於網路,最好採用jpeg 格式檔案。

是一種很特殊的資源檔案。建立uiimage物件時,可以使用類級構造方法+ imagenamed:和例項 構造方法-initwithcontentsoffile:。+ imagenamed:方法會在記憶體中建立快取,這些快取直到應用停止才清除。如果是貫穿整個應用的(如圖示、logo等),推薦使用+ imagenamed:建立;如果是僅使用一次的圖 片,推薦使用下面的語句:

nsstring *path = [[nsbundle mainbundle] pathforresource:@」animal-2」 oftype:@」png」]; uiimage *image = [[uiimage alloc] initwithcontentsoffile:path];

3.2 還有就是音訊,用的不多,不在介紹

4、惰性載入

惰性載入(lazy load)指一些物件不是在應用和檢視等初始化時建立,而是在用到它的時候建立。當應用中有一些物件並不經常使用時,惰性載入可以提高程式效能。

5、資料的持久化

6、編譯引數設定

optimization level編譯引數決定了程式在編譯過程中的兩個指標——編譯速度和記憶體的占用,也決定了 編譯之後可執行結果的兩個指標——速度和檔案大小。如上所述,optimization level分為6個級別,各個級別 的含義如下所示。

 -o0。預設級別。不進行任何優化,直接將源**編譯到執行檔案中,結果不進行任何重排,編譯時間比 較長。主要用於除錯程式,可以進行設定斷點、改變變數、計算表示式等除錯工作。圖20-43所示的debug 情況就是-o0級別。

 -o1(或-o)。最常用的優化級別,不考慮速度和檔案大小權衡問題。與-o0級別相比,它生成的檔案更小, 可執行的速度更快,編譯時間更少。

 -o2。在-o1級別基礎上再進行優化,增加指令排程的優化。與-o1級別相比,它生成的檔案大小沒有變大, 編譯時間變長了,編譯期間占用的記憶體更多了,但程式的執行速度有所提高。該級別是應用程式發布時的 最理想級別,在增加檔案大小的情況下提供了最大優化。

 -o3。在-o2和-o1級別上進行優化,該級別可能會提高程式的執行速度,但是也會增加檔案的大小。

 -os。這種級別用於在有限的記憶體和磁碟空間下生成盡可能小的檔案。由於使用了很好的快取技術,它在 某些情況下也會有很快的執行速度。該級別常用於發布ios裝置時,圖20-43所示的就是release為-os級別

的情況。

 -ofast。它是一種更為激進的編譯引數,它以犧牲浮點數的精度為代價。

選擇optimization level時,要權衡編譯時間、編譯記憶體占用、編譯結果檔案大小和執行速度等問題。一般情

況下,-o0適合於除錯,-os級別是ios裝置上的應用發布最理想的選擇。如果不滿意這6個預定級別,使用者可以自 定義乙個級別來編譯。

7、第三方庫的使用

社會化分享,現在許多公司都是採用第三方。如:友盟、sharesdk等。

8、多餘的nslog。

這個很簡單,通過巨集定義可以在發布編譯時去掉。

9、不要做無用功

不要在啟動時花幾百ms來做logging,不要為同樣的資料做多次查詢

試圖重用:對於建立過程昂貴的物件,要重用而不是重新建立

table view的cell(復用)

date/number的formatter(不是每次啟動都重新建立)

正規表示式

sqlite語句

10 、nsdateformatter

nsdateformatter物件本身初始化很慢,同樣還有nscalendar也是如此.然而在一些使用場景中不可避免要使用他們,比如json資料解析中.使用這個物件同時避免其效能開銷帶來效能開銷,一般比較好的方式是通過新增屬性(推薦)或建立靜態變數保持該物件只被初始化一次,而被多次復用.不得不值得一提的是設定乙個nsdateformatter屬性速度差不多是和建立新的例項物件一樣慢!

參考:

ios 記憶體優化筆記

1 整體思路 1.1 開發過程優化 在開發過程中將軟體功能進行拆分,每乙個小功能完成後,及時的進行功能測試 1.2 禁止用autorelease 1.3 大量操作時,主動加 autoreleasepool,及時將系統 autorealease 資源及時釋放 2 讀取方式,和記憶體之間的關係 2.1 ...

筆記 ios效能優化(未完待續。。。)

最近在網上看了很多的記憶體優化方案,感覺都很 nice 本文主要是對網上的記憶體優化方案做一下列表式總結,不涉及具體的內容 主要目的就是備忘 用arc管理記憶體 貌似現在的新專案99 用的都是arc了 在正確的地方使用 reuseidentifier 盡可能使 view 不透明 view不透明的情況...

iOS 記憶體優化

nsautoreleasepool pool nsautoreleasepool new 建立乙個自動釋放池 1.首先我們獲取到需要處理的資源的路徑 nsstring filepath nsbundle mainbundle pathforresource test oftype png 2.將載入...