簡體   English   中英

Swift 2.2內存管理

[英]Swift 2.2 memory management

所以我有一個包含UIImageView的UIView,它有一個相當大的圖像(比如1600x1600)。 當我加載它時,我可以在Xcode上看到內存按預期上升但仍然可管理。

現在,如果我myView.removeFromSuperview() ,內存不會下降,如果我一直添加和刪除其他圖像的視圖,例如:

  1. 設置圖像
  2. 將其添加到視圖中
  3. 從superview中刪除圖像
  4. 設置另一個圖像
  5. 將其添加到同一視圖中
  6. 回到3並繼續循環

在每次迭代之后,我看到內存不斷增加,直到最終我的內存不足,收到內存警告並崩潰。

這是預期的嗎? 當我從superview中刪除圖像時,不應該釋放內存嗎?

使用Swift,使用ARC(自動引用計數),無法手動釋放內存。 內存管理嚴格委派給操作系統,如果你想提高應用程序的內存性能,唯一的辦法就是改進代碼本身。

如果你正在處理如此大的圖像,那么可能會縮小圖像本身的分辨率而不會丟失應用程序上的任何功能。 顯示此圖像時,您還可以實現在主線程上執行的緩存或“實時”壓縮,避免使用寶貴的內存來表示像素。 有一篇很好的NSHipster文章討論了在這個鏈接中調整Swift圖像大小的不同技巧。

// Basic usage of UIGraphicsGetImageFromCurrentImageContext()
let yourScaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

UIKit提供了許多用於圖像大小調整的高級API,它們直接影響圖像在屏幕上的顯示方式,因此也適用於主UI線程。

最后,優化在屏幕上表示此大圖像的方式,以優化所需的內存量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM