2014年8月18日月曜日

@autoreleasepool { }

久しぶりのiOSネタ。

ALAssetから引っ張ってきたPNG(スクリーンショット)画像をUIImageViewに表示して、これをボタンで高速でめくっていくと「メモリ足りない」って落ちる現象に遭遇。

ゆっくりページめくりしている時は大丈夫。

【ALAssetからdefaultRepresentationを取得し、その後UIImageに変換してUIImageViewにセットする】だけの簡単な処理だけど、高速でめくるとreleaseする前に次の画像を取ってきてしまうので落ちる。落ちる前に手を止めると、メモリのグラフがガタガタと下がっていく。

一瞬、「めくる速度を制限しようか」という悪魔の声が聞こえたけど、それは最後の手段として取っておくことにした。

でも、__weak試したりnil代入しても状況は変わらない。

最終的には上記【】の処理を@autoreleasepool {}で囲って強制的に掃除したらスクリプトで超高速めくりを実行してもメモリサイズは安定したままで落ちなくなった。

いやはや。

それにしても、どうしてこういう問題は、定時で帰る5分前に発生するのでしょうか。15分ぐらいで解決できたから良いんだけど。

0 件のコメント:

コメントを投稿