私は、多くのCGColorsをコンポーネントに分解し、コンポーネントの平均化を行い、新しいコンポーネントで新しい色をつけることで、多くのCGColorsを「追加」しています。私がこのコードを実行すると、InstrumentsはCGColorsがたくさん漏れていると判断し、アプリケーションはゆっくり実行されます。CGColorを効率的に変更する
毎回CGColorCreate(colorspace、components)を使用せずに私がやっていることをやり遂げる方法があれば、メモリリークの問題を解決できるように感じます。
これは、すべてのヘルプは本当に助けであっても、高く評価されるだろう「あまり頻繁に色を追加。」
const CGFloat *cs=CGColorGetComponents(drawColor);
const CGFloat *csA=CGColorGetComponents(add->drawColor);
CGFloat r=(cs[0]*w+csA[0]*aW)/1;
CGFloat g=(cs[1]*w+csA[1]*aW)/1;
CGFloat b=(cs[2]*w+csA[2]*aW)/1;
CGFloat components[]={r, g, b, 1.f};
drawColor=CGColorCreate(CGColorSpaceCreateDeviceRGB(), components);
「を追加する」色のコードです私はCGColorsを修正しようとする唯一の人ではないと確信しています。
編集:Robのコメントは適切なトラックに置かれていますが、新しいdrawColorが割り当てられる前に、色を追加するメソッドが複数回呼び出されるため、malloc double freeエラーが発生します。 drawColorを解放する前に、drawColorが存在するかどうかをチェックする方法はありますか?ここに新しい関連コードがあります。
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
CGColorRelease(drawColor);
drawColor=CGColorCreate(colorSpace, components);
CGColorSpaceRelease(colorSpace);
答えをありがとう。私はCGContextSetStrokeColorWithColor(context、color)でコンテキストに割り当てた後、CGColorを解放しています。それは同じことを達成するだろう、それはwouldnt?私は今あなたの提案をテストすることはできませんが、後で行います。 – Enigmoid
私はコメントを編集できるとは思わないが、あなたは正しい。 drawColorを割り当てるメソッドがdrawRectよりも頻繁に発生するため、色が漏れています。ここでは色を解放します。それを指摘してくれてありがとう。私はチャンスを得るときにそれをテストするつもりです。 – Enigmoid
編集した質問にあなたや他の人が答えを持っているかどうかにかかわらず、CGColorReleaseを置く場所を見つけました。ご協力ありがとうございました。 – Enigmoid