Ответ 1
Прочитайте документацию для NSTimer:
Существует три способа создания таймера:
Используйте метод scheduleTimerWithTimeInterval: invocation: repeat: или scheduleTimerWithTimeInterval: target: selector: userInfo: repeat: class для создания таймера и планирования его в текущем цикле выполнения в режиме по умолчанию.
Используйте timerWithTimeInterval: invocation: repeat: или timerWithTimeInterval: target: selector: userInfo: repeat: метод класса для создания объекта таймера без его планирования в цикле выполнения. (После его создания вы должны добавить таймер в цикл выполнения вручную, вызвав метод addTimer: forMode: соответствующий объект NSRunLoop.)
Выделите таймер и инициализируйте его с помощью initWithFireDate: interval: target: selector: userInfo: repeat: method. (После его создания вы должны добавить таймер в цикл выполнения вручную, вызвав метод addTimer: forMode: соответствующий объект NSRunLoop.)
Вы используете метод, который уже добавляет его в mainLoop из 1. - вам нужно удалить эту строку или создать таймер с 2. подход и оставить ручное добавление.
Также помните, что вы должны отправить недействительное сообщение из потока, на котором был установлен таймер. Если вы отправляете это сообщение из другого потока, источник входного сигнала, связанный с таймером, не может быть удален из цикла запуска, что может помешать корректному выводу потока.