2010-02-25 103 views
2

我有一个视图控制器,它调用performSelector:withObject:afterDelay。但是,如果我在调用此方法后立即删除了该视图控制器,则系统尝试在该(已删除的)视图控制器上执行延迟选择器时,该应用会崩溃。如何解决这个performSelector:withObject:afterDelay:问题?

现在我该怎么办?我需要摆脱视图控制器来节省内存,所以没有办法让它挂在身边。

任何方式来取消延迟执行选择器之前执行?

回答

3

我建议改用NSTimer。您可以简单地使用invalidate计时器,以确保在UIViewController消失后永远不会调用该计时器。 invalidate定时器的好时刻例如在viewWillDisappear:

这确实意味着计时器是由视图控制器拥有。但无论如何,这是一个很好的设计。

1

对于已删除的对象,您无法执行选择器,您可能需要将对象置于其周围,或者使用其他可以挂起的较小对象进行工作。

要取消,有一个cancelPreviousPerformRequestsWithTarget:selector:object:cancelPreviousPerformRequestsWithTarget:方法。

+0

您可以通过执行类似'[someObject performSelector:@selector(foo :) withObject:someObject afterDelay:1.0]''来执行对即将被删除的对象的选择器。在这种情况下,'someObject'将在该选择器的执行周围被保留和释放。 – 2010-02-25 20:23:39

+0

正确,但在这种情况下,对象不会被删除,它即将被删除。 – Bearddo 2010-02-25 21:02:32