Это довольно распространенный вопрос, так как NSTimer
, созданный с помощью scheduledTimerWith...
, может приостановиться во время взаимодействия с пользователем. Вот похожий вопрос .performSelector:..afterDelay:..
методы используют NSTimer
внутри, как вы могли бы себе представить.В основном, когда вы используете scheduledTimerWith...
или performSelector:..afterDelay:..
ваш таймер запланирован в цикле выполнения на NSDefaultRunLoopMode
, который может приостанавливаться, пока пользователь взаимодействует с приложением.Решение состоит в том, чтобы самостоятельно спланировать таймер в цикле выполнения для CommonModes
, например, так:
timer = [NSTimer timerWithTimeInterval:0.01 target:self selector:@selector(setNeeds) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
Если вы не хотите управлять своим собственным NSTimer
для этой функции, тогда вы можете использовать performSelector:withObject:afterDelay:inModes:
функция.Последний аргумент - это массив режимов цикла выполнения, в которые вы можете поместить NSRunLoopCommonModes
.