Запуск кода на каждой n-й итерации NSTimer tick

Я относительно новичок в кодировании и задаюсь вопросом, есть ли обычный способ выполнить какой-то код на каждой n-й итерации цикла (в этом случае тикер NSTimer).

Я использую CADisplayLink , и он обновляется, но много раз в секунду, 40, 50, что угодно. Если я хочу выполнить какой-то код на каждом, скажем, 500 из этих циклов, есть стандартный способ сделать это? Я предполагаю, что я мог бы поместить что-то вместе с оператором modulo и integer , но есть ли более нормальный способ, который должен знать новый кодер?

Дополнительная ясность (хотя я уверен, что это довольно распространенная вещь). У меня есть таймер, который тикает 60 раз в секунду, но я хочу только что-то сделать с каждой десятой итерацией. Я уже знаю, что для этого могу использовать modulo и integer, но я хочу знать, есть ли другое соглашение для обработки такой ситуации.

Заранее спасибо!

0
nl ja de
можете ли вы сделать это более понятным?
добавлено автор CRDave, источник

2 ответы

Установите выделенный таймер для правильного интервала.

Независимо от того, используете ли вы NSTimer или CADisplayLink , вызовы таймера могут быть объединены и смещены, если они занимают слишком много времени. Если у вас есть ссылка на изображение, для которой требуется 20 кадров, она получает только трижды каждую секунду (с учетом интервала обновления 60 кадров в секунду). И если у вас есть таймер, установленный для запуска каждую секунду, что в одном экземпляре занимает чуть больше двух с половиной секунд для запуска, он будет «съедать» свою следующую итерацию и запустит следующую итерацию на полсекунды слишком поздно.

Из-за этого ваш таймер может выйти из синхронизации, если вы только подсчитываете таймерные вызовы. Чтобы сделать что-то многократно с интервалом, установка таймера на этот интервал является абсолютным наилучшим приближением.

Наличие второго таймера, подобного этому, не является проблемой производительности, если вы не очень много таймеров, и в этом случае вы должны стандартизировать один таймер таймера и планировать события для определенных точек времени (что все еще не совпадает с подсчетом предыдущих итераций) ,

0
добавлено
Совершенно, это именно то, что я искал. Благодаря!
добавлено автор Luke, источник

Установите выделенный таймер для правильного интервала.

Независимо от того, используете ли вы NSTimer или CADisplayLink , вызовы таймера могут быть объединены и смещены, если они занимают слишком много времени. Если у вас есть ссылка на изображение, для которой требуется 20 кадров, она получает только трижды каждую секунду (с учетом интервала обновления 60 кадров в секунду). И если у вас есть таймер, установленный для запуска каждую секунду, что в одном экземпляре занимает чуть больше двух с половиной секунд для запуска, он будет «съедать» свою следующую итерацию и запустит следующую итерацию на полсекунды слишком поздно.

Из-за этого ваш таймер может выйти из синхронизации, если вы только подсчитываете таймерные вызовы. Чтобы сделать что-то многократно с интервалом, установка таймера на этот интервал является абсолютным наилучшим приближением.

Наличие второго таймера, подобного этому, не является проблемой производительности, если вы не очень много таймеров, и в этом случае вы должны стандартизировать один таймер таймера и планировать события для определенных точек времени (что все еще не совпадает с подсчетом предыдущих итераций) ,

0
добавлено
Совершенно, это именно то, что я искал. Благодаря!
добавлено автор Luke, источник