scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: create timers that get automatically added to an
NSRunLoop, meaning that you don't have to add them yourself. Having them added to an
NSRunLoop is what causes them to fire.
timerWithTimeInterval:target:selector:userInfo:repeats:, you have to add the timer to a run loop manually, with code like this:
[[NSRunLoop mainRunLoop] addTimer:repeatingTimer forMode:NSDefaultRunLoopMode];
Other answers on here suggest that you need to call
fire yourself. You don't - it will be called as soon as the timer has been put on a run loop.