我有一个视图控制器,它调用performSelector:withObject:afterDelay。但是,如果我在调用此方法后立即删除了该视图控制器,则系统尝试在该(已删除的)视图控制器上执行延迟选择器时,该应用会崩溃。如何解决这个performSelector:withObject:afterDelay:问题?
现在我该怎么办?我需要摆脱视图控制器来节省内存,所以没有办法让它挂在身边。
任何方式来取消延迟执行选择器之前执行?
我有一个视图控制器,它调用performSelector:withObject:afterDelay。但是,如果我在调用此方法后立即删除了该视图控制器,则系统尝试在该(已删除的)视图控制器上执行延迟选择器时,该应用会崩溃。如何解决这个performSelector:withObject:afterDelay:问题?
现在我该怎么办?我需要摆脱视图控制器来节省内存,所以没有办法让它挂在身边。
任何方式来取消延迟执行选择器之前执行?
我建议改用NSTimer
。您可以简单地使用invalidate
计时器,以确保在UIViewController
消失后永远不会调用该计时器。 invalidate
定时器的好时刻例如在viewWillDisappear:
。
这确实意味着计时器是由视图控制器拥有。但无论如何,这是一个很好的设计。
对于已删除的对象,您无法执行选择器,您可能需要将对象置于其周围,或者使用其他可以挂起的较小对象进行工作。
要取消,有一个cancelPreviousPerformRequestsWithTarget:selector:object:或cancelPreviousPerformRequestsWithTarget:方法。
您可以通过执行类似'[someObject performSelector:@selector(foo :) withObject:someObject afterDelay:1.0]''来执行对即将被删除的对象的选择器。在这种情况下,'someObject'将在该选择器的执行周围被保留和释放。 – 2010-02-25 20:23:39
正确,但在这种情况下,对象不会被删除,它即将被删除。 – Bearddo 2010-02-25 21:02:32