ios內存優化

技巧

採取的措施

消除內存泄露

由於內存是iPhone OS的關鍵資源,所以您的應用程序不應該有任何的內存泄露。存在內存泄露意味着應用程序在之後可能沒有足夠的內存。您可以用Instruments程序來跟蹤代碼中的泄露,該程序既可以用於仿真器,也可以用於實際的設備。

使資源文件儘可能小

文件駐留在磁盤中,但在使用時需要載入內存。屬性列表文件和圖像文件是通過簡單的處理就可以節省空間的兩種資源類型。您可以通過NSPropertyListSerialization類將屬性列表文件存儲爲二進制格式,從而減少它們的使用空間;對於圖像,可以將所有圖像文件壓縮得儘可能小(PNG圖像是iPhone應用程序的推薦圖像格式,可以用pngcrush工具來進行壓縮)。

使用Core Data 或SQLite來處理大的數據集合

如果您的應用程序需要操作大量的結構化數據,請將它存儲在Core Data的持久存儲或SQLite數據庫,而不是使用扁平文件。Core Data和SQLite都提供了管理大量數據的有效方法,不需要將整個數據一次性地載入內存。

Core Data的支持是在iPhone OS 3.0系統上引入的。

延緩裝載資源

在真正需要資源文件之前,永遠不應該進行裝載。預先載入資源文件表面看好象可以節省時間,但實際上會使應用程序很快變慢。此外,如果您最終沒有用到那些資源,預先載入將只是浪費內存。

將程序連編爲Thumb格式

加入-mthumb開關可以將代碼的尺寸減少最多達35%。但是,對於具有大量浮點數運算的代碼模塊,請務必將這個選項關閉,因爲對那樣的模塊使用Thumb反而會導致性能的下降。

減少自動釋放對象的使用

通過autorelease方法釋放的對象會留在內存中,直到顯式清理自動釋放池或者程序再次回到事件循環。在任何可能的時候,請避免使用autorelease方法,而是通過release方法立即收回對象佔用的空間。如果您必須創建一定數量的自動釋放對象,則請創建局部的自動釋放池,以便在返回事件循環之前定期對其進行清理,回收那些對象的內存。

爲資源設置尺寸限制

避免裝載大的資源文件,如果有更小的文件可用的話。請用適合於iPhone OS設備的恰當尺寸圖像來代替高清晰度的圖像。如果您必須使用大的資源文件,需要考慮僅裝載當前需要的部分。舉例來說,您可以通過mmapmunmap函數來將文件的一部分載入內存或從內存卸載,而不是操作整個文件。

避免無邊界的問題集

無邊界的問題集可能需要計算任意大量的數據。如果該集合需要的內存比當前系統能提供的還要多,則您的應用程序可能無法進行計算。您的應用程序應該儘可能避免處理這樣的集合,而將它們轉化爲內存使用極限已知的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章