use*_*789 2 iphone objective-c nstimer ios
[self performSelectorInBackground:@selector(method) withObject:nil];
-(void)method
{
timer1 = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(getLastImageName1) userInfo:nil repeats:YES];
runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:timer1 forMode:NSRunLoopCommonModes];
[runLoop run];
}
-(void)viewdidunload
{
[timer1 invalidate];
timer1=nil;
}
Run Code Online (Sandbox Code Playgroud)
我开始Timer在HomeViewController连我无效,它一直在运行OtherViewController.我的代码出了什么问题?
nhg*_*rif 12
首先,当您重写生命周期方法时,应该包括super对该方法版本的调用.
其次,Objective-C是区分大小写的,所以即使你的应用程序试图甚至调用生命周期viewDidUnload,你的方法也永远不会被调用,因为那就是你的方法.
第三,在iOS 6.0中viewDidUnload被弃用了,除非你想要支持向后兼容性,否则不应该在这一点上使用它.它永远不会在iOS 6.0及更高版本中调用.
如果您希望计时器在用户导航离开当前视图时停止,您将需要以下内容:
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
if (timer1.isValid) {
[timer1 invalidate];
}
timer1 = nil;
}
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找其他东西,您需要详细说明您想要完成的内容.
如果您正在处理iOS 6.0之前的项目,无论出于何种原因,您的方法未被调用的原因至少部分是因为拼写错误.Objective-C再次区分大小写.您的方法名称应拼写viewDidUnload.
为了将来参考,问题不应该是"为什么我的计时器无效?" 您应该首先使用断点或NSLog语句来确定viewdidunload尝试使计时器无效的方法是否会触发.当你发现它没有被调用时,请搜索一下"如何调用viewdidunload?" 那么你将解决大写问题,问题将(可能)仍然存在,所以做更多的研究.如果最后,你仍然无法弄明白,作为最糟糕的情况,帖子问题应该是"怎么没有调用viewdidunload?"
| 归档时间: |
|
| 查看次数: |
1895 次 |
| 最近记录: |