1
1
这不是内存管理问题当您计划NSTimer实例时,运行循环会保留计时器,因此无需担心自己保留计时器(无论是否为ARC)。 计时器还保留其目标,因此您不必担心首先释放目标的情况。但是,如果目标是一个视图,则在将其从视图层次结构中删除后,它可能会收到一条计时器消息。在这种情况下,您将希望忽略该消息。 您可以通过两种方式处理此问题:
如果你能确保目标总是在身边,并且总是可以收到消息,那么你什么都不需要做。例如,您的应用程序委派对象将在应用程序的整个生命周期中一直存在。 NSTimer目标动作
不能将计时器设置为只调用任何对象上的任何方法。计时器方法
必须
只取一个参数,即发送消息的NSTimer实例。您已定义
您需要这样定义您的方法:
获取
创建计时器时,可以将
您需要使用NSNumber,因为userInfo必须是一个对象。 可能的错误
如果应用上述方法不能解决问题,需要检查的一件事是
|
2
1
我猜你使用的是ARC。你没有把定时器存储在一个强变量中,所以它在发射之前就被释放了。创建一个ivar“NSTimer*aTimer”,然后在实例化计时器时使用它而不是本地变量(我在这里不太清楚,因为我不记得runLoop是否在计划时保留了它——可能是为了完整起见,把它留在这里,因为如果由于任何原因你被“弹出”等,你应该调用计时器上的invalide)。 此外,您的计时器会发送消息:actionMethod:(NSSTimer*)本身,但您的操作方法需要一个int。您需要协调它。 编辑: 将您的操作方法更改为以下格式:
然后,您可以向它发送一个NSNumber,或者让计时器用计时器调用它。您可以从NSNumber中取出int,或者从计时器中获取一个值: |