我有一個iPhone應用程序,我將許多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的評論把我放在正確的軌道上,但我得到malloc雙免費錯誤,因爲添加顏色的方法多次被稱爲新的drawColor分配前。有沒有辦法在釋放之前檢查drawColor是否存在?這是新的相關代碼。
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
CGColorRelease(drawColor);
drawColor=CGColorCreate(colorSpace, components);
CGColorSpaceRelease(colorSpace);
感謝您的回答。在將它分配給CGContextSetStrokeColorWithColor(context,color)的上下文後,我釋放CGColor。那會完成同樣的事情,不是嗎?我現在無法測試你的建議,但我會遲一點。 – Enigmoid
我不認爲我可以編輯評論,但你是對的。我在泄漏顏色,因爲指定drawColor的方法比drawRect更頻繁:我釋放顏色。感謝您指出了這一點;當我有機會的時候我會去測試它。 – Enigmoid
無論您或任何人是否對我編輯的問題有答案,我找到了放置我的CGColorReleases的地方。感謝您的幫助。 – Enigmoid