Ваша проблема в том, что [NSDate date]
возвращает автоматически выпущенную дату. Это хорошо для первого запуска вашего таймера, так как вы вызываете fire
для таймера до конца метода, который был инициализирован recordDate
.
Вам нужно retain
recordDate
, чтобы он прожил достаточно долго, чтобы пережить еще одну ссылку на него при последующих срабатываниях таймера.
Автоматически освобожденные объекты освобождаются платформой в конце каждой итерации цикла выполнения. Вы никогда не сможете точно знать, когда закончится цикл выполнения, поэтому вы можете быть в безопасности только в предположении, что автоматически выпущенные объекты безопасны для использования до конца метода, в котором они были автоматически освобождены.
добавление recordDate = [[NSDate date] retain];
к вашему коду должно решить вашу проблему.
Но не забывайте, что теперь, когда вы сохранили свой объект recordDate
, вам нужно освободить его в какой-то момент в будущем - метод stop:
может показаться хорошим местом для этого.
Наконец, после освобождения объекта recordDate
вы должны назначить nil
указателю, чтобы предотвратить любые проблемы с «висящим указателем».