#iphone #ios #cocoa-touch #uikit #core-graphics
#iPhone #iOS #cocoa-touch #uikit #ядро-графика
Вопрос:
Я использую изображение для заливки цвета в текущем графическом контексте, используя следующее утверждение:
CGContextSetFillColorWithColor(aContext,[[UIColor colorWithPatternImage:[UIImage imageNamed:kRunnerGradientedBackgroundImage]] CGColor]);
Это утверждение внезапно увеличивает использование моей памяти с 1,3 МБ до 5,6 МБ. Если я отпущу UIImage
объект, он уменьшится до 1,3 МБ, но поскольку количество сохраняемых объектов изображения уже равно 0, я не могу этого сделать.
Есть предложения, как контролировать этот внезапный всплеск памяти?
Комментарии:
1. хм,
@autoreleasepool { YOUR CODE GOES HERE }
?2. автозапуск также не помогает. Он сохраняет память с высоким значением.
Ответ №1:
Для его использования данные шаблона должны быть загружены в память. Обойти это невозможно. Вы могли бы попробовать меньший шаблон. Также попробуйте вернуть цвет заливки для вашего контекста к простому сплошному цвету, когда закончите рисовать с помощью шаблона.
ДОБАВЛЕНО: Также возможно, что сам графический контекст становится намного больше, когда вы добавляете в него шаблон или изображение (чтобы вместить все пиксели, необходимые для шаблонного изображения). Попробуйте удалить и освободить UIView или CGLayer, содержащие графический контекст.
Комментарии:
1. Попытался сбросить цвет заливки обратно на [[UIColor clearColor] CGColor], но это не помогает.
Ответ №2:
Насколько велик kRunnerGradientedBackgroundImage
и в каком формате он находится? Если PNG, есть ли у него ненужный альфа-канал? Как упоминалось в hotpaw2, изображение шаблона должно быть как можно меньше, которое UIKit затем обработает для вас. Можете ли вы уменьшить размер с помощью PNGCRUSH?
Другой подход заключается в использовании CGGradient
или CAGradientLayer
программном создании градиента с помощью CoreGraphics / CoreAnimation.
См.:
Ответ №3:
Я удалил изображение и теперь рисую градиент с помощью кода. Это уменьшило скачок памяти на 4,5 МБ.