Вы не должны полагаться на спящий поток, потому что вы никогда не можете быть уверены, что это займет столько же времени.
Таким образом, вместо того, чтобы усыплять поток, ничего не делайте с ним, вообще ничего (кроме, конечно, увеличения вашего фиксированного временного шага)
Тогда вы обнаружите, что частота кадров будет намного более плавной.
Также как примечание, не используйте FPS в качестве индикатора производительности. Используйте количество времени, которое потребовалось для завершения одного обновления.
Если вы стремитесь при скорости 60 кадров в секунду, время обработки цели должно быть 0,01666 * секунд. На самом деле вы должны иметь возможность увеличить время обработки до 0.02555 *, что составляет 40 кадров в секунду, и в игре не должно быть заметного падения производительности
РЕДАКТИРОВАТЬ: я также заметил, что вы создаете новый пул и сливать каждый раз при обновлении, по моему опыту пулы авто-релиза должны быть размещены на более высоких уровнях, таких как appDelegate. Но я бы не стал считать его ниже уровня создания (создания) / выпуска (истощения), а его дальнейшее повышение также поможет с производительностью.