Здесь происходит то, что цикл работает как можно быстрее, и вызовы performSelector:...
происходят с такой скоростью. Затем, в 2.0001, 2.0004, 2.0010, ... секунд спустя, вызывается method
.
Другая вещь (теперь, когда вы отредактировали, чтобы прояснить, что performSelector:...
заканчивает вызовом того же метода, в котором он находится, это то, что значение переменной index
вашего цикла не сохраняется между вызовами. Каждый раз, когда запускается loopMethod
, код в цикле начинается с начала: index
устанавливается в ноль и отсчитывается. Это означает, что каждый раз, когда метод запускается, вы получаете loopLimit
new ожидающие вызовы, через 2 секунды. Каждый из этих вызовов по очереди порождает новый набор и т. Д. До бесконечности.
Каждый запуск цикла на самом деле конечен, но цикл продолжает выполняться. Вам нужен какой-то способ сообщить о необходимости остановки цикла, и вы не можете сделать это полностью в методе цикла. Вы можете поместить счетчик (вашу переменную index
) в ивар; это сделало бы его значение постоянным при вызовах к loopMethod
, но я думаю, что вы хотите изучить , используя NSTimer
, который повторяет:
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(method:) userInfo:nil repeats:YES];
Если вы вставите это в ивар, вы сможете отследить, сколько раз он выстрелил, и остановить его позже. На SO уже есть несколько сообщений об обновлении текстовых полей в цикле с использованием таймера, подобного следующему: https://stackoverflow.com/search?q=%5Bobjc%5D+update+text+field+timer