ssj*_*ssj 9 objective-c nstimer uiview invalidation dealloc
@interface someview:UIView{
NSTimer* timer;
}
@end
@implementation someview
-(void)dealloc{
NSLog(@"dealloc someview");
[timer invalidate];
timer = nil;
}
-(void)runTimer{
//
}
-(void)someMethod{
timer = [NSTimer timerWithTimeInterval:2.0f target:self selector:@selector(runTimer) userInfo:nil repeats:YES];
}
@end
Run Code Online (Sandbox Code Playgroud)
释放someview不会调用dealloc并且计时器继续运行.
如果我注释掉"timer = [NSTimer schedule ...."部分,将调用dealloc.这意味着我的代码的所有其他部分都正常工作,而计时器是罪魁祸首.runTimer方法是空的,这意味着它只是与我混淆的计时器.
jfe*_*man 22
我认为在UIView中使用NSTimer的最佳解决方案是覆盖removeFromSuperview方法;
- (void)removeFromSuperview
{
[timer invalidate];
timer = nil;
[super removeFromSuperview];
}
Run Code Online (Sandbox Code Playgroud)
这里唯一要记住的是你需要确保timer不是一个nil对象,因为removeFromSuperview也可以从其他UIView的超级dealloc方法中自动调用.你可以用条件包裹来检查.
归档时间: |
|
查看次数: |
3931 次 |
最近记录: |