2011-08-25 6 views
5

CGPathを返し、アナライザーの警告を生成するメソッドがあります。このメソッドはプロトコルで宣言されています。ここで警告生成される例示的な実装されている:このメモリ警告を回避するにはどうすればよいですか?

「ライン47に割り当てられ、 『パス』に格納されたオブジェクトの潜在的な漏れ」

- (CGPathRef)createPathForBounds:(CGRect)bounds key:(NSString *)key; 
{ 
    if ([key isEqualToString:OvalColumn]) 
    { 
     CGPathRef path = CGPathCreateWithEllipseInRect(bounds, NULL); 
     return path; 
    } 

    return NULL; 
} 

ここで使用例であります警告、「呼び出し側によって、この時点で所有されていないオブジェクトの参照カウントの不正な減少」

CGPathRef path = [self.delegate createPathForBounds:bounds key:someKey]; 

// Use the path to do some drawing 

CGRelease(path); 

を生成マイメモリー管理がcorrecですt;私は保留したCGPathを私のプロトコルメソッドから渡しているので、呼び出しブロックでそれを解放しているので、警告を無視することができますが、それらを完全に削除したいと思います。

アナライザを幸せにする命名規則がありませんか? 関数をプロトコルで定義できますか? サブクラス化はどのように機能しますか?

+1

あなたはおそらく、あなたが得ている警告の言葉を開示することができますか、または私たちは推測する必要がありますか? –

+0

申し訳ありません。更新しました。 – kubi

+0

メソッドの名前をpathForBoundsに変更するとどうなりますか?key:?? –

答えて

5

- (CGPathRef)newPathForBounds:(CGRect)bounds key:(NSString *)key

トピックに関する詳細な注意事項が交互にhere

を見つけることができます、あなたは属性cf_returns_retainedを使用することを選択した可能性がありますが、それは命名規則有利になるように(IMO)が最適です。

+0

美しい。それで後天的には明らかです。 – kubi

+0

私はなぜ彼が投票に落ちたのか分かりません。これは絶対に正しい答えです。アナライザは、メソッドの命名規則に従って作業しています。名前を "newPathForBounds"に変更すると、アナライザ(およびそれを使用する開発者)はこのメソッドが行っていることを正確に伝えます。また、保持されているオブジェクトが他端から吐き出されることを期待する必要があります。 – Steve

+0

私は、Foundationオブジェクトを返すメソッドがFoundation命名規則を使用しなければならないと仮定しました。なぜ私はこれがダウン投票を得たかわからない。 – kubi

関連する問題