Простое решение: Ditch NSTimer.
Переместите перерисовываемый код в один метод, затем используйте CADisplayLink
.Проблема с использованием вашего подхода NSTimer
заключается в том, что все перерисовывается слишком быстро или слишком медленно для экрана.Используя CADisplayLink, вы можете синхронизировать ваш код перерисовки с частотой обновления экрана.Все, что вам нужно сделать, это подправить код, чтобы он мог не вызываться в определенное время.
И да, убедитесь, что вам не нужно перерисовывать, как сказал Аран Малхолланд выше.Просто убедитесь, что проверки не занимают столько времени, сколько перерисовка.
И не забудьте оптимизировать свой код.Много.Используйте ivars для доступа к объектам, но все свойство (self.myObject =) для установки ваших объектов.