まだどこにもないアプリを作る

アプリ開発でつまづいたところなどを中心に記事にして行きます。

【Swift】Forループの中で重い処理をしたい場合はautoreleasepool{}でメモリ解放。

今までかなりこれを知らなくて苦労していました。

 

Cleaning Memory Footprint with the Autoreleasepool in Swift | by Oğuz Öztürk | Mediate Labs | Medium

↑こちらのサイト様によりますと

For文やwhile文の中で作成されたオブジェクトはforループwhileループを抜けるまで

削除されないようです。

そのためfor文が動いている間はメモリが上昇し続けます。

 

これを防ぐために使うのが

autoreleasepool{}

for文の中身をこれで括れば

ちゃんとループ中でもメモリを解放するようになってくれます

for i in 0..<10{

            autoreleasepool {//重い処理,画像加工など}

}

 

私はPHAssetからUIImageに高画質で変換する処理をfor文でループさせていたのですが、autoreleasepool{}を使わないと100枚変換したらメモリが2GBを超えてiPhoneが落ちてしまていました。

f:id:rils_k:20210530165149p:plain

autoreleasepool{}を使うと最高でも200MBは超えなくなりましたね。