@interface someview:UIView{
NSTimer* timer;
}
@end
@implementation someview
-(void)dealloc{
NSLog(@\"dealloc someview\");
[timer invalidate];
timer = nil;
}
-(
As mentioned above, Timers retain their targets. Until the timer is invalidated, there is a retain cycle between the timer and the view, so the view will not be deallocated.
I would invalidate the timer when it's removed from the view hierarchy by subclassing didMoveToSuperview, this gets called by the system when there is a View-Related Change (e.g superview changes). The 'removeFromSuperview' is only called when removeFromSuperview is called on UIView
- (void)didMoveToSuperview
{
[super didMoveToSuperview];
if (!self.superview)
{
[timer invalidate];
timer = nil;
}
}