Apple / Mac
[iOS] 圧倒的メモリ不足
murakami
こんにちは、寒さも深まってきましたがいかがおすごしでしょうか?
私のiPhoneは開発で通常よりも暖かく、メモリの空き具合は通常よりも数倍残念なコトになっています。
さて今日は「圧倒的メモリ不足」ということで、iOS開発してて実機に移したらメモリ不足で「あれれ?」となってそれを打破した系のネタです。
何をしてたか? : いわゆる多重ループ等による処理
ARCの有無 : 有
どう治そうとした? : 手動でメモリを開放しないといけないとことか全部しっかり開放するようにした
→上ので治った? : 治らなかった
とまあこのような有り様でした。確かに手動で開放できるところのメモリは全てしっかり開放したし、なぜだ・・・?と小一時間。
「!!!」
@autoreleasepool
「これだ!」
ということで、だいぶ使ってなかった@autoreleasepoolの登場です。
@autoreleasepool は@autoreleasepoolのスコープ内のReferenceCountを管理して、そのスコープ外になったら開放するという結構なスグレモノ。
ということで、 NS*系のオブジェクトを利用する際に以下の様な感じで修正したところ1.1GB → 0.15GBという飛躍的なメモリ空き容量の改善が見られました。
[前]
NSData *dat = [[NSData alloc] init]; NSString *str = @"sample text";
[後]
@autoreleasepool { NSData *dat = [[NSData alloc] init]; NSString *str = @"sample text"; }
ということで、もしメモリの空き具合に困ったら一度これを疑ってみては如何でしょうか?
—–
担当 : 村上 (高速化!メモリ削減!大満足!)