Note in particular that run loops retain their timers, so you can release a timer after you have added it to a run loop.
scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
the target object is retained by the timer and released when the timer is invalidated.
invalidate
Stops the receiver from ever firing again and requests its removal from its run loop.
You must send this message from the thread on which the timer is installled.