Вы делаете недействительным таймер сразу после его создания и планирования.Удалите строку [timer invalidate];
в -setupTimer
:
- (void)setupTimer {
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(doSomething) userInfo:nil repeats:YES];
objc_setAssociatedObject(self, &key, timer, OBJC_ASSOCIATION_RETAIN);
}
Из документации :
[аннулировать] останавливает приемник когда-либо еще раззапрашивает его удаление из цикла выполнения.
Правильно ли я считаю, что этот код находится в категории?В противном случае я не могу придумать вескую причину сделать таймер ассоциированным объектом, а не просто использовать для него переменную обычного экземпляра.