Ios4 禁用NSTimer的正确方法是什么?

Ios4 禁用NSTimer的正确方法是什么?,ios4,nstimer,invalidation,Ios4,Nstimer,Invalidation,我正在编写一个应用程序,其中主视图控制器有几个NSTimer可以控制不同的事件。除了一些奇怪的情况外,当我从导航堆栈中弹出这个主视图控制器时,计时器似乎没有被禁用 我的问题是:什么是使NSTimer无效或禁用的正确方法,以便它不会再次被调用 现在,我实例化一个NSTimer,如下所示: alertViewTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(alertTimer) user

我正在编写一个应用程序,其中主视图控制器有几个NSTimer可以控制不同的事件。除了一些奇怪的情况外,当我从导航堆栈中弹出这个主视图控制器时,计时器似乎没有被禁用

我的问题是:什么是使NSTimer无效或禁用的正确方法,以便它不会再次被调用

现在,我实例化一个NSTimer,如下所示:

alertViewTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(alertTimer) userInfo:nil repeats:YES];
我使用此宏使NSTimer无效:

#define TimerInvalidateAndNil(A) \
if(A != nil) \
{\
if([A isValid])\
{\
[A invalidate]; \
}\
A = nil; \
}

没有必要检查时间是否为零。在Objective-C中,向nil发送消息是有效的。另外,请注意,NSTimer与您的UI被弹出/弹出/诸如此类无关。幸运的是,他们按照你告诉他们的去做,而不是在后台做虚假/神奇的状态改变。在我弹出视图控制器(它有计时器)之后,我一直得到的错误是消息被发送到deallocated实例,它突出显示了一行,我在弹出的视图控制器中调用TimerInvalidateAndNiltimer。这也是在一个函数中,该函数仅在计时器关闭时调用,并且该函数应该禁用计时器。有什么想法吗?-让计时器失效。如果您以前没有保留它,它将被解除分配,从而显示错误消息。那么您是说,当我调用alertViewTimer=[NSTimer scheduledTimerInterval:…]时,我应该调用alertViewTimer=[[NSTimer scheduledTimerInterval:…]并保留它吗?那么invalidate稍后会发布吗?不,您不必保留它。只要在需要失效时失效就行了。如果要跟踪它是否有效,请在无效后将其设置为NULL,然后检查NULL。