【发布时间】:2012-01-19 04:02:26
【问题描述】:
我有一个 iPhone 应用程序,我在其中“添加”许多 CGColors,方法是将它们分解为它们的组件,平均组件,然后用新组件制作新颜色。当我运行这段代码时,Instruments 发现我泄漏了很多 CGColors,并且应用程序运行缓慢。
如果有一种方法可以在不使用 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 double free 错误,因为在分配新的 drawColor 之前多次调用了添加颜色的方法。有没有办法在我发布之前检查 drawColor 是否存在?这是新的相关代码。
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
CGColorRelease(drawColor);
drawColor=CGColorCreate(colorSpace, components);
CGColorSpaceRelease(colorSpace);
【问题讨论】:
标签: iphone performance objective-c++ cgcolor