【iOS ARC】 CALayerやCAKeyframeAnimationに設定したUIImageの画像を解放したい

Pocket

 UIImageViewのメモリ累積によるメモリリークを解決し、ソースコードの修正を行ったのですが、依然としてメモリから開放されない画像があることを発見してしまいました。

 そうでした、CALayerを使ったほうが処理が速いと知って、一部、CAKeyframeAnimation を使ったアニメーションを行っていたのを記憶の中から抹殺していたようです。

 こいつもガッツリと強参照なので解放しなければいけません。そうそう、前回の記事では強参照かどうか調べる方法を書いていませんでしたね。実はそんなに難しくはありません。ドキュメントを見ればOKです。

 ドキュメントはXcodeから気軽に開けます。HelpのDocumentation and API Reference をクリックします。
20140109_01

 アドレスバーに【CALayer】と入力するとクラスの説明にたどりつけます。あとは contents プロパティの説明を探して確認。
20140109_02

 @property(retain) id contents

 とかかれていますね。 @property(retain) は __strong と同意ということなので強参照となります。

 CAKeyframeAnimation の values は
 
 @property(copy) NSArray *values

 と定義されており、 copy も __strong となるために強参照となります。

 では、解放の仕方です。

 CALayer をインスタンス化していた変数を calayer
 CAKeyframeAnimation をインスタンス化していた変数を cakeyframeanimation
 とし
 view というUIView でアニメションさせていた場合、

 とすることで画像をスッキリと解放できます。CABasicAnimationでも同じだと思います。
 画像の読み込みには SAUtility pathForResource:を使用しています、UIImageViewからUIImageを解放するをご確認ください。

 みなさんも快適なアプリ開発ライフをお過ごしください。

 おわり

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*