2013年8月30日金曜日

Xcode : Analyze で Potential leak of an object stored into 'xxxx'

ARCを使用しているプロジェクトをXcodeでAnalyzeしたときに、
Potential leak of an object stored into 'xxxx'
がでる場合、CoreFoundationで生成したオブジェクトを解放せずにメモリリークしているときがある。

CoreFoundationで生成したオブジェクトを __bridge でキャストして変数に代入しても参照カウントが減っていない。
そのため、releaseされずにメモリリークになってしまう。

例えばCFURLCreateStringByAddingPercentEscapesでURLエンコードするときに、
NSString* param
= (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(...

とすると、Analyzeで
Potential leak of an object stored into 'param'
となる。
この場合、__bridge_transfer でキャストして参照カウントを減らすようにする。
NSString* param
= (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(...

0 件のコメント:

コメントを投稿