Я работаю над приложением, в котором есть представление в масштабируемом UIScrollView. Когда пользователь увеличивает или уменьшает масштаб, я перерисовываю представление в UIScrollView, чтобы оно было четким и четким. Это представление имеет фоновое изображение, которое я рисую с помощью CGContextDrawTiledImage.
Я заметил, что использование памяти растет каждый раз, когда я переключаюсь на новый уровень масштабирования. Похоже, CGContextDrawTiledImage хранит кэш где-то изображения, масштабированного до разных размеров. Итак, если я увеличу масштаб с 1,0 до 1,1x, использование памяти возрастет. Возвращение к 1.0 не приводит к росту, но затем к 1.05, а затем к 1.2 - к росту в два раза. Вернуться к 1.1 и без роста. Конечно, уровень масштабирования находится под контролем пользователя, поэтому я не могу контролировать, сколько уровней увеличения происходит. Прямо сейчас мое фоновое изображение довольно большое (512x512), поэтому это приводит к быстрому увеличению использования памяти * . Это не проявляется как утечка памяти в Инструментах, просто дополнительные выделения, которые никогда не освобождаются.
Я пытался найти способ освободить кеш, который создается, но безуспешно. Например, он не отвечает на предупреждения о недостатке памяти.
Я также пытался установить backgroundColor представления в UIColor, созданный с помощью colorWithPatternImage, но это не работает, потому что я выполняю масштабирование, изменяя CTM графического контекста, а не устанавливая преобразование представления.
Какие-нибудь идеи о том, как предотвратить использование памяти от взрыва?