2012-05-07 10 views
2

重要度はです。clang_analyzerこれを使用せずにアナライザが以下のコードで漏れを叫んでいるのを見てください。重要度__clang_analyzer__

#ifndef __clang_analyzer__ 
CGPathRef pathWithRoundRect(CGRect iRect, CGFloat iRadius) { 
    CGMutablePathRef returnVal = CGPathCreateMutable(); 
    CGPathMoveToPoint(); 
    CGPathAddArcToPoint(); 
    CGPathAddArcToPoint(); 
    CGPathAddArcToPoint(); 
    CGPathAddArcToPoint(); 
    CGPathCloseSubpath(returnVal); 
    return returnVal; 
} 
#endif 
+0

あなたはreturnValを漏らしています...私はその#ifndefで、そのコードはコンパイルされていないと推測しているので、その中のリークについては教えてくれません。 – EmilioPelaez

+0

@Emilio:それはリークではありません。関数の呼び出し側には依然として 'CGPath'への参照があります。 –

答えて

3

__clang_analyzer__プログラムは(Clang User's Manual参照)分析のためにコンパイルされるときに定義され、マクロです。

それが定義されていた場合、#ifndef#endif間のコードはアナライザがそれを見ていないことを意味し、コンパイルされていない、あなたはその名前の関数から戻っている所有CGMutablePathをご紹介することはできませんそれが所有参照を返すことを示すものではありません。

createを関数名の先頭に追加することを検討してください。

+0

それは 'returnVal'が常に漏れているということですか?これをやめる方法は? – Abhinav

+0

それは漏れていません - 関数が返ってきたときもまだ参照があります。発信者がそれを所有し、完了したときに発信者を解放するのは発信者の責任です。 –

+0

@Abhinavもhttp://clang.llvm.org/docs/AutomaticReferenceCounting.html#misc.c-retainableを見てください – Kentzo

関連する問題