[WWDC2018] ——深入解析iOS內存/iOS Memory Deep Dive(二)

接上文[WWDC2018] ——深入解析iOS內存/iOS Memory Deep Dive(一)

三、Tools For Profiling Footprint

講了instruments的一些使用,有一些技巧和新特性,我并不是很關注這個,本文會跳過這一節,有興趣的人可以自行查看。

四、Images

圖片渲染格式

SRGB format : 每個通道2個byte,每個像素4個byte,分別表示紅、綠、藍、透明度通道。
Wide format : 每個通道2個byte,每個像素8個byte。支持更寬的色域,但占用內存更多,使用需謹慎。
Luminance and alpha 8 format : 每個像素8個byte,分別表示灰度和透明度,適用于 Metal APP中的陰影,通常的APP中很少用到。
Alpha 8 format : 每個像素1個byte,單色。適用于蒙層、無emoji的文字等。

通常的圖片,都是使用SRGB進行渲染,也就是老生常談的圖片尺寸*4,才是圖片使用的真正內存。

推薦使用iOS10引入的新API,UIGraphicsImageRenderer,可以在iOS12中自動選擇合適的format,這個在做一些基礎圖形渲染時比較有用,比如貝塞爾曲線繪制,陰影繪制等。

圖像下采樣(Downsampling)

使用imageIO進行圖像降低采樣,可以有效的減小圖片內存。這個問題和我在自己的圖片優化文章中有提到過。圖像降低采樣優化,在LKImageKit中有,在SDWebImage中則沒有。

五、Optimizing when in background

在APP進入后臺時的一些推薦操作:

1.通過APP的生命周期,如 forground, background等事件
2.通過頁面的生命周期,如 viewWillAppear, wiewDidLoad等事件

當頁面在后臺時,卸載圖片資源,在頁面進入前臺時,加載圖片資源。那么為什么要這么做呢。這個是在iOS生態下,各APP間互惠互利的一個行為,后臺APP使用更少的資源,就能更好的提升前臺應用的體驗。退一步說,APP進入后臺后,使用更少的內存,也可以減少后臺OOM。雖然現在國內的企業幾乎不關注后臺OOM,但是其實對于用戶來說,后臺進程被殺也是一個相當糟糕的用戶體驗。

六、Demo演示

七、總結

總體而論,是一個很好的session,對iOS內存不怎么了解的同學可以從這個session中學到很多有用的東西。但是除了一些新的feature,幾個蘋果工程師講解的iOS內存相關的問題,做過幾年iOS開發都是會知道的。

而我個人比較期待的是:

Memory Footprint Limit 各設備的技術公式或者準確值(這個有民間的統計數據,但是并沒有官方的指導值)。
Memory Footprint Limit 和Memory Warning的關系,也即是Memory Footprint值在什么情況下回觸發內存警告,以及OOM(同樣的,這個有民間的統計數據,但是并沒有官方的指導值)。
Memory Warning的其他影響因素。session中只說了可優化的在Memory Footprint,但是實際上內存警告應該不止Memory Footprint單一約束條件。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容