У меня есть приложение для iPhone, где я «добавляю» много CGColors вместе, разбивая их на их компоненты, усредняя компоненты, а затем делая новый цвет с новыми компонентами. Когда я запускаю этот код, Instruments обнаруживает, что у меня много CGColors, и приложение работает медленно.
Мне кажется, что я мог бы решить проблему утечки памяти, если бы был способ сделать то, что я делаю, без использования CGColorCreate (colorspace, компоненты) каждый раз.
Это код для цвета "добавление"
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.
РЕДАКТИРОВАТЬ: Итак, комментарий Роба поставил меня на правильный путь, но я получаю malloc дважды свободные ошибки, потому что метод с добавлением цвета вызывается несколько раз перед назначением нового drawColor. Есть ли способ проверить, существует ли drawColor, прежде чем я его выпущу? Вот новый соответствующий код.
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
CGColorRelease(drawColor);
drawColor=CGColorCreate(colorSpace, components);
CGColorSpaceRelease(colorSpace);