Скорее всего, вовремя: + timeWithTimeInterval или -performSelector: withObject: afterDelay: - PullRequest
1 голос
/ 17 ноября 2009

Я хотел бы воспроизвести звук только в течение короткого промежутка времени, меньшего, чем продолжительность звукового файла. Поэтому, одновременно с началом игры, я бы хотел поставить в очередь задачу, которая остановит звук.

Я вижу два варианта постановки в очередь метода stop: NSTimer и executeSelector: withObject: afterDelay:

Кто-нибудь знает, какой из двух наиболее вероятен вовремя или имеет более высокий приоритет? Не обязательно, чтобы меня вызывали с точностью до миллисекунды, но точность до 0,1 секунды была бы велика.


Приложение: Кто-нибудь знает, где я могу найти документацию о приоритете различных задач таймера и задержки? Например, как бы рейтинг ниже:

  • Задачи NSTimer
  • performSelector
  • вызов метода drawRect представления после вызова setNeedsDisplay
  • вызов процедур рисования слоя после вызова setNeedsDisplay
  • любые другие отложенные задачи

И было бы полезно попробовать сделать это в другой теме?

Ответы [ 3 ]

2 голосов
/ 17 ноября 2009

performSelector:withObject:afterDelay: создаст таймер, чтобы знать, когда стрелять, поэтому оба подхода должны быть одинаково (не) надежны. Если ваш код выполняет дорогостоящие вычисления в главном потоке и не возвращает управление циклу выполнения или если цикл выполнения должен обрабатывать много событий, таймер не будет срабатывать вовремя.

1 голос
/ 17 ноября 2009

Имейте NSTimer, но с гораздо меньшим интервалом времени, чем тот, который должен воспроизводить ваш звук. Когда сработает ваш таймер, и это будет пару раз, пока звучит ваш звук, вы посчитаете, сколько времени прошло с момента его запуска. Когда это время превышает установленный вами запас, вы прекращаете звук.

0 голосов
/ 17 ноября 2009

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

...