Core Animation использует фоновый поток, чтобы выполнить его работу. Теперь проблема заключается в следующем: у меня тяжелый расчет происходит в основном потоке. Core Animation немедленно зависает до тех пор, пока этот расчет не будет выполнен. И затем он продолжает заканчивать анимацию. Я помню, как читал в документе, что CA имеет низкий приоритет во время обработки, что означает, что независимо от того, какой основной поток хочет сделать, это high-prio и будет выполняться в большей степени, чем любая причудливая анимация одновременно.Есть ли способ заставить Core Animation запустить его поток?
Я хочу заставить Core Animation запланировать его фоновый поток красиво с помощью основного потока ни при каких обстоятельствах. Или, альтернативно, отдельный поток, который будет выполнять тяжелый расчет вне основного потока. Я уже пробовал это, но CA все еще зависает, пока это не будет сделано. Я ожидаю, что планировщик быстро переключит время обработки между CA и этим вычислением.
Как можно заставить ЦА продолжать работать? Если все идет немного медленнее, это нормально. Но самое главное, что все вещи продолжают идти с точки зрения пользователей.
Спасибо. Является ли NSOperations способным делать тайм-ауты? Мой расчет уже разбит на куски. Каждый из них запланирован с задержкой 0,05 секунды. Так что на самом деле есть некоторое свободное время между ними. Однако, когда CA должен делать предварительные таблицы в начале, ваша идея ждать -animationDidStart - это goog. Я попробовал это, просто задерживая вызов для начала с первого блока вычислений с 1 секундой. CA начинает анимировать, затем становятся тяжелыми вычислениями, и CA замерзает. Это не помогает. Я выполняю вычисления в новом потоке. – 2009-10-23 18:51:58
Дело в том, что после вычисления каждого блока данных в пользовательском интерфейсе происходит обновление. Эти обновления бывают быстрыми и гладкими, как и ожидалось. Это было бы просто идеально, когда был бы способ запланировать все это таким образом, что CA будет делиться временем CPU с этим ... будет смотреть на эти вещи NSOperationQueue, хотя они не похожи на то, что они будут предоставлять таймауты, такие как delayed performSelector calls do (?) – 2009-10-23 18:53:58
NSOperationQueue создает потоки для ваших NSOperations по мере необходимости.Разумно разумно управлять тем, какие задачи выполняются, но я не знаю, имеет ли он тот же уровень осведомленности на уровне системы на iPhone, что и на Snow Leopard (где он накладывается поверх GCD). Он также поддерживает зависимости между задачами, которые вы можете использовать в своих интересах здесь. –