UIGraphicsBeginImageContextWithOptions をやめて UIGraphicsImageRenderer を使うメリット
WWDCのメモリのセッションを見ていたら思わぬTipsについて言及されていた。
WWDC 2018 iOS Memory Deep Dive の20分57秒あたり https://developer.apple.com/videos/play/wwdc2018/416
UIGraphicsBeginImageContextWithOptions
を使うのはやめて UIGraphicsImageRenderer
を使えという話題。
UIGraphicsImageRenderer
は最適なグラフィックフォーマットを自動で選択してくれる。
マスク画像の様な単色の画像を描画する場合に UIGraphicsBeginImageContextWithOptions
では1ピクセル4バイトのsRGBに対して UIGraphicsImageRenderer
は1ピクセル1バイトで75%のメモリの節約になる。*1
さらに UIGraphicsImageRenderer
で作成された単色の UIImage
は UIImageView
の tintColor
などで表示色の変更が可能で、複数の色の画像が欲しい場合にそれぞれの色でレンダリングして異なる UIImage
を作成しなくても tintColor
を各ビューに設定するだけで済むとの事。
*1:UIGraphicsImageRenderer はワイドカラーにも対応しているので、単色の場合はメモリの節約になるけどワイドカラーが適用されるケースでは1ピクセル8バイトで逆にメモリ使用量は倍に増える。