我的iPhone應用程序有很多高分辨率的圖像(例如:2898×779個像素尺寸),整個項目文件夾的大小隻有17MB,但如果我運行應用程序,當第一個視圖加載真正的內存和顯示在儀器的VM跟蹤器中的髒內存超過62MB。任何人都可以幫助我避免這種情況?任何建議都會很感激。如何減少實際內存消耗IOS
回答
影像一旦加載到內存中失去了(大多數?)他們的壓力。很不幸,圖片在磁盤上可能看起來不大(捆綁在應用程序中),但一旦加載到應用程序中,圖片可能會變得更大。在RAM
一個2898x779圖像將有效地使用2898x779x4字節=〜9MB,比較,與你的形象有多大的磁盤上,你應該看到其中的差別。
所以要真正回答你的問題,要麼縮小你的圖像(因爲你的設備屏幕可能不是那麼大,除非視網膜ipad什麼的)或使用CATiledLayer
,它只會加載部分圖像可見屏幕,而不是整個圖像。
5個技巧,以減少內存的iOS應用程式問題
1.使用虛擬內存 iOS不使用交換文件,但是它支持虛擬內存。如果一個應用程序可以使大量的數據在內存中的隨機訪問你想組織它的映射文件而不是加載它與 的malloc() RAM。要做到這一點的最簡單的方法是調用 NSData的initWithContentsOfMappedFile:
2.避免堆放自動釋放對象 當實例像NSString對象與他們住,直到你的自動釋放池釋放沒有明確的分配 - 通常,直到您的應用程序退出。廣泛使用這些技術可能會導致RAM中出現大量垃圾。使用 的NSString initWithContentsOfFile: 以便以後可以釋放它,而不是 的NSString stringWithContentsOfFile的: 。同樣的規則適用於 UIImage imageNamed: - 這不建議用於圖像加載。
3.處理內存警告 處理內存警告時卸載不必要的資源。即使你不能卸載任何你的東西通話 在所有UIViewControllers [超級didReceiveMemoryWarning] 的。這將在默認情況下釋放一些資源,如非前視圖上的UI控件。未能處理此事件可能會使iOS認爲您的應用程序值得查殺。
4.考慮動畫視圖過渡 動畫像翻動過渡是注意到當被執行時引起RAM使用尖峯有限的使用。此功能非常整潔,應該在許多情況下使用,但可能會在重負載的多任務環境中觸發內存警告。特別是我們強烈建議避免OpenGL視圖的動畫。
5.測試設備上的內存佔用情況 使用儀器進行測試。最有用的工具是分配,泄漏和活動監視器。在大多數情況下,在模擬器上進行測試並不相關,因爲其內存佔用情況往往完全不同。一旦你測試你可以找出你的應用程序的每個部分使用多少內存,哪些是瓶頸以及如何優化。
也許你應該給信貸:http://surgeworks.com/blog/lab-mobile/iphone/5-tips-to-reduce-memory-issues-in-ios-apps –
- 1. 減少內存消耗
- 2. jQAssistant - 減少內存消耗
- 3. 如何減少AJDT的內存消耗?
- 4. 如何減少unordered_multiset的內存消耗?
- 5. 在ubuntu @ aws微實例上減少mysql的內存消耗
- 6. 如何加速python腳本並減少內存消耗?
- 7. 如何減少Java程序的內存消耗
- 8. 如何**禁用** Chrome的新嘗試來減少內存消耗?
- 9. 如何通過python線程減少內存消耗
- 10. 如何減少.NET應用程序消耗的內存量?
- 11. 如何減少WordPress網站的內存消耗?
- 12. 照片拼貼:如何減少內存消耗?
- 13. 如何減少內存消耗在android系統
- 14. 如何減少與許多單元格PdfPTable的內存消耗
- 15. 如何減少碼頭集裝箱的內存消耗?
- 16. C++:緩存JSON而不是對象減少內存消耗?
- 17. 將單獨的實體幫助減少內存消耗? (實體框架)
- 18. Azure MVC5 BundleTransformer減少內存耗盡
- 19. 減少日期核心分配的內存消耗
- 20. 是否可以減少Windows服務的內存消耗?
- 21. 展望VSTO崩潰和減少內存消耗的方法
- 22. 來自BitmapSource的MemoryStream,需要減少內存消耗
- 23. 減少通過WCF服務的內存消耗
- 24. 在Perl中使用多線程時如何減少內存消耗?
- 25. 如何減少Java應用程序服務器中的內存消耗
- 26. C#:如何減少使用位圖時的內存和CPU消耗?
- 27. 空CALayer消耗多少內存?
- 28. 以最少內存消耗Resuse ArrayList
- 29. 正在消耗多少內存映射?
- 30. 內存消耗
能否請您分享一些代碼,您是如何加載圖像或看法? – Iducool
對於您重複參考的圖像,請勿加載圖像並保留參考。基本上每次需要圖像時都要使用'+ imageNamed',並在您不再需要圖像時立即釋放圖像。然後系統會緩存「舊」圖像,並會在下一個「imageNamed」請求中返回相同的圖像對象(因此它真的很快),但會刪除最近未使用的圖像。 –