Некоторые идеи / мысли:
С одной стороны, этот кусок кода явно имеет проблемы, поскольку вы можете дважды освобождать bitmapData, если контекст не выделяется.
if (context == NULL) { free (bitmapData); }
CGColorSpaceRelease( colorSpace );
free (bitmapData);
if (context == NULL) { return NULL; }
Я также согласен с benzado, что вы используете bitmapData до тех пор, пока не закончите с контекстом ... хотя это не сбой, что вызывает недоумение. возможно, повезло.
Обратите внимание, что я почти уверен, что поставщик данных и биты, на которые он ссылается, станут частью cgImage, возвращаемого из CGImageCreate:
поставщик
Источник данных для растрового изображения. Для получения информации о поддерживаемых форматах данных см. Обсуждение ниже. Кварц сохраняет этот объект; по возвращении вы можете спокойно отпустить его.
Таким образом, это означает, что до тех пор, пока возвращаемое вами UIImage не будет выпущено, я не думаю, что cgImage или поставщик данных битов уйдут. Итак, возможно, проблема в том, что UIImage не каждый уходит?
Почему вы не просто используете CGBitmapContextCreateImage () для создания результирующего изображения? (вам может потребоваться вызвать CGContextFlush () для принудительного рисования в растровом изображении, но похоже, что вы делаете все изменения пикселя вручную, поэтому, возможно, в этом нет необходимости).
Исходя из расплывчатой документации, я не думаю, что вы должны быть свободны () с указателем, возвращаемым CGBitmapContextGetData (но это немного догадка из-за неопределенности документов).
также:
вы не инициализируете srcData, destData & finalData в NULL, поэтому ваш тест до их free () кажется рискованным.
все, что сказало (и попробуем некоторые из этих вещей), у нас была утечка в нашем приложении Mac в одной точке, потому что в 10.5.6 и ранее некоторые аспекты CIImage imageWithCGImage, imageByApplyingTransofrm, imageByCroppingToRect, NSBitmapImageRep initWithCIImage или NSBitmapImageRep LeG CG , Это было исправлено в 10.5.7, поэтому возможно, что нечто подобное существует в версии iPhone OS, с которой вы тестируете.