忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

ARC環境でのメモリリーク発生原因と対処方法(12種類)

わか

Xcodeでメモリリークを取り除くためAnalyzeで解析し、instrumentsのLeaks,Allocationsで確認しました。
その際に私が遭遇したメモリリークの原因と対処法について記載します。(ARC環境)


CGImage
・CGImageRefはCGImageReleaseで解放
・CGImageContextでCGContextReleaseで解放
・CGColorSpaceRefはCGColorSpaceReleaseで解放
・CGGradientRefはCGGradientReleaseで解放
・CGDataProviderRefはCGDataProviderReleaseで解放

pdf
・CGPDFPageRef,CGPDFPageRetainはCGPDFPageReleaseで解放
・CGPDFDocumentCreateWithURLはCGPDFDocumentReleaseで解放

その他
・CFで始まる型はCFReleaseで解放(CGDataProviderCopyDataで作成したCFDataRefなど)
・malloc,callocはfreeで解放

iOS関連
UIKitにバックグラウンドスレッドでアクセスするとメモリリークやEXC_BAD_ACCESSが稀に発生する。(instrument(Leaks)のResponsible Frameにgetcontextstackと表示された)
DeprecatedなAPIを使用するとメモリリークする場合がある。
・Appleの不具合でメモリリークする。これはAppleに報告するしかない。

iOS5以下
dispatch_queue_tはdispatch_releaseで解放


ARC環境でも解放しなければならない領域は多く存在します。(上記で記載した内容以外も多数存在する)
予めコーディング段階で注意しておくと後で楽になりますので、覚えておくようにします。

拍手[1回]

PR