Какой самый быстрый способ кэшировать нарисованное изображение экрана и отображать его в iOS?

Вместо этого позволить drawRectперерисовывать тысячи точек каждый раз, я думаю, что есть несколько способов «кэшировать изображение на экране» и любой дополнительный рисунок, который мы добавим к этому изображению, и просто покажем это изображение, когда оно будет время до drawRect:

  1. Используйте BitmapContext и нарисуйте растровое изображение, а в drawRectнарисуйте это растровое изображение.

  2. Используйте CGLayerи нарисуйте CGLayerв drawRect, и это может быть быстрее, чем метод 1, так как это изображение кэшируется в графической карте (и это не будет учитываться при использовании ОЗУ для «предупреждения о памяти» на iOS?)

  3. Нарисуйте CGImageи используйте слой представления: view.layer.contents = (id) изображение;

Таким образом, кажется, есть три метода, и я думаю CALayerв методе (3) может использовать только CGImageдля достижения этого. CALayerсам по себе не может кэшировать изображение экрана, в отличие от CGLayerв (2).

Является ли метод (2) самым быстрым из всех трех, и существуют ли другие методы, позволяющие это сделать? На самом деле я планирую анимировать несколько экранных изображений (зацикливая 5 или 6 из них) и попытаюсь использовать CADisplayLink, чтобы попробовать максимальную частоту кадров 60 кадров в секунду.Будет ли любой из методов (1), (2) или (3) использовать память графической карты и, следовательно, не использовать ОЗУ и, следовательно, с меньшей вероятностью получить предупреждение о памяти от iOS?

7
задан Jeremy L 27 May 2012 в 18:36
поделиться