У меня есть следующий фрагмент кода, который я использую для масштабирования изображений. Это в цикле, который создает и истощает пул авторесурсов для каждого прохода. Этот код отлично работает на симуляторе в iOS5.0, в iOS4.3 на iPad или симуляторе, но на iOS5.0.1 на iPad1, после 50-60 проходов, drawInRect начинает потреблять память, которая никогда не будет выпущена. Я вызывал это из вторичного потока, но теперь вызываю операции масштабирования в основном потоке.
UIGraphicsBeginImageContext( newSize );
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Я делаю что-то неправильно или это ошибка iOS5.0.1?
Обновление: Я пробовал много тестов. Я смог доказать, что тот же самый код, скомпилированный с XCode 4.0, отлично работает на том же iPad. Тот же код, скомпилированный с XCode 4.2.1, вызывает состояние нехватки памяти. Эта процедура масштабирования вызывается в фоновом потоке. Я написал другую процедуру масштабирования с использованием графических вызовов нижнего уровня. Он не протекает с XCode 4.0, но протекает, когда в моем приложении с XCode 4.2.1. Точное одно и то же подпрограмму и дерево вызовов, запущенное в автономном проекте, не похоже на утечку (большую) память на XCode 4.2.1. Я жду, чтобы услышать от Apple об этом. В то же время мне нужно использовать XCode 4. Единственное установочное изображение, которое у меня есть, требует Snow Leopard, что означает, что я использую свою старую старую машину на 5,5 лет. Благодаря
Обновление 1/2012 Это похоже на то, что приложение запускается из XCode. Тот же исполняемый файл, запущенный на iPad, не обнаруживает утечки. Другое приложение с одной и той же программой не обнаруживает утечки.
Я открыл отчет об ошибке с Apple и отправил им проект, который воспроизводит проблему. Я не ожидаю, что это будет разрешено в ближайшее время, но это не кажется столь же распространенным, как я думал изначально.
Обновление 6/2012 Несмотря на то, что Apple прислала минимальный проект, который воспроизвел проблему, они заявляют, что не могут воспроизвести проблему и не добиваются какого-либо прогресса в ней.