because retain (aka strong reference) cycles in the common case where the timer's target is also its owner
ARC will only release ( and call dealloc ) objects, when there are no
strong references pointing to this object ( no one is retaining ).
strong reference and it will retain
dealloc will not be called, because NSTimer still has
strong reference to the object. If there is no
Dealloc, this means
NSTimer will never be invalidated ... leads to memory leak or even crashes.
There is a way to
invalidate timer in dealloc or when
target becomes nil.
Have a look at the answer here http://stackoverflow.com/a/16822471/1824510