Objective c NSTimer不会失效
如何使计时器失效?我在没有使用Objective c NSTimer不会失效,objective-c,nstimer,invalidation,Objective C,Nstimer,Invalidation,如何使计时器失效?我在没有使用self和许多其他方法的情况下尝试过它,但由于某种原因,当我按下按钮时,计时器不会失效。检查loadWeb:是否被多次调用。如果是,您将让旧计时器在没有引用的情况下运行,这样您就不能使它们无效。您应该有[self.checkForAdd invalidate]操作 当您使计时器无效时,如果您没有创建新的计时器,请设置self.checkForAdd=nil以确保不再尝试使用计时器(如果您这样做,某些操作将引发异常) 如果在任何时候您执行了self.checkForA
self
和许多其他方法的情况下尝试过它,但由于某种原因,当我按下按钮时,计时器不会失效。检查loadWeb:
是否被多次调用。如果是,您将让旧计时器在没有引用的情况下运行,这样您就不能使它们无效。您应该有[self.checkForAdd invalidate]创建新计时器之前,请执行代码>操作
当您使计时器无效时,如果您没有创建新的计时器,请设置self.checkForAdd=nil代码>以确保不再尝试使用计时器(如果您这样做,某些操作将引发异常)
如果在任何时候您执行了self.checkForAdd=nil
如果没有使计时器无效
d,那么您将没有对它的引用,因此您将来将无法使其无效。根据您的代码,loadWeb
由一个按钮触发。所以,每次按下按钮时,您都将创建新的计时器。最好在其他地方创建计时器,比如在init中创建,或者在viewDidLoad方法中创建,因为如果在这里创建计时器,必须确保不会一次又一次地创建计时器。您可以通过执行if
检查来完成此操作
-(IBAction) loadWeb: (id) sender {
[_webView loadRequest:nsrequest2];
_webView1.hidden = YES;
_webView.hidden = NO;
self.checkForAdd = [NSTimer scheduledTimerWithTimeInterval:0.4
target:self selector:@selector(checkForAddToCart:) userInfo:nil
repeats:YES];
}
-(IBAction)button1:(id)sender {
[self.checkForAdd invalidate];
}
现在,它在点击按钮时创建新的计时器,而上一个计时器没有参考。是否多次调用了loadWeb:
方法?self.checkForAdd
是否在其他地方使用?将NSLog放入loadWeb和button1中,并在button1中记录checkForAdd的值。您可能会发现,调用loadWeb的次数比button1多,或者button1为零。
if(!self.checkForAdd){
self.checkForAdd = [NSTimer scheduledTimerWithTimeInterval:0.4
target:self selector:@selector(checkForAddToCart:) userInfo:nil
repeats:YES];
}