У меня есть приложение для iPhone, где я добавляю много CGColors вместе, разбивая их на свои компоненты, усредняя компоненты, а затем создавая новый цвет с новыми компонентами. Когда я запускаю этот код, Instruments обнаруживает, что я просачиваю много CGColors, и приложение работает медленно.Эффективное изменение CGColor
Я чувствую, что могу решить проблему утечки памяти, если бы был способ сделать то, что я делаю, без использования CGColorCreate (цветовое пространство, компоненты) каждый раз.
Это код цвета «добавление»
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.
EDIT: Итак, комментарий Роба поставил меня на правильный путь, но я получаю двойные бесплатные ошибки malloc, потому что метод с добавлением цвета вызывается несколько раз до того, как назначен новый drawColor. Есть ли способ проверить, существует ли drawColor до его выпуска? Вот новый соответствующий код.
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
CGColorRelease(drawColor);
drawColor=CGColorCreate(colorSpace, components);
CGColorSpaceRelease(colorSpace);
Спасибо за ответ. Я освобождаю CGColor после того, как я назначил его контексту с CGContextSetStrokeColorWithColor (контекст, цвет). Это будет сделано то же самое, не так ли? Я не могу проверить ваше предложение сейчас, но позже. – Enigmoid
Я не думаю, что могу отредактировать комментарий, но вы правы. Я пропускаю цвета, потому что метод, назначающий drawColor, происходит чаще, чем drawRect: где я отпускаю цвет. Спасибо что подметил это; Я собираюсь проверить это, когда у меня появится такая возможность. – Enigmoid
Независимо от того, есть ли у вас или у кого-либо ответ на мой отредактированный вопрос, я нашел место для размещения своих CGColorReleases. Спасибо за помощь. – Enigmoid