У меня есть рисование пальцами в одном представлении моего приложения. Когда пользователь прикасается к представлению, я сохраняю текущее изображение представления, поэтому при необходимости могу отменить его позже. Чтобы уменьшить отставание, я запускаю его с помощью централизованной диспетчеризации, что-то вроде
TouchesBegan method...
dispatch_async(dispatch_get_main_queue(), ^{
[self saveCurrentState];
});
Я пробовал разные подходы к этому saveCurrentState, то есть сохранение образа на диск, в основные данные или в образ в памяти. Последний метод работает лучше всего, но он удваивает использование памяти и приводит к опасному сбою приложения из-за использования памяти. Первые два метода (сохранение на диск или в данные ядра) приводят к такой большой задержке, что если пользователь рисует несколько линий, удаляя и касаясь экрана в быстрой последовательности, некоторые линии не будут отображаться, потому что программа занята сохранением одного изображения, в то время как поступает приказ спасти еще одного.
Я пытался создать последовательную очередь или использовать одну из трех основных очередей GCD с высоким приоритетом, но результат всегда один и тот же.
Как я могу это решить? Как лучше всего это сделать?
Благодарю.