scheduledTimerWithTimeInterval vs performselector with iOS 5.0延迟

时间:2011-11-14 09:30:38

标签: iphone objective-c ios5 nstimer performselector

我正在使用scheduledTimerWithTimeInterval进行函数调用。我只是检查特定Web服务的xml解析是否已完成,并在获得成功响应后在didEndElement方法中使计时器失效。

timerForStopWebService = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(stopWS) userInfo:nil repeats:NO];

现在我面临iOS 5.0的问题,并且在其他iOS版本中工作正常。在iOS 5.0中,即使我使其无效,也可以随时调用函数stopWS。如果你有解决方案,请告诉我。

现在我正在实现具有延迟的performselector并在stopWS中设置布尔变量以识别解析是否已完成。我只是想知道这有什么重大区别吗?这个解决方案能解决我的问题吗?

如果存在其他方式,请建议我,谢谢。

2 个答案:

答案 0 :(得分:21)

以下是您的差异

performSelectorWithObjectAfterDelay

  • 顾名思义,在指定的秒数后执行选择器。的 ONCE 即可。

  • 您需要注意的是,在释放执行选择器的对象之前,您需要取消之前的任何执行请求。为此使用cancelPerformSelector方法。

scheduledTimerWithTimeInterval

  • 此方法使您能够在指定的持续时间后调用选择器,但它还有一个参数[repeats:],可让您调用相同的选择器重复

  • 您还可以将调用传递给调用选择器,这在选择器需要大量参数时特别有用。

  • 您需要在不再需要时使计时器无效。这应该可以解决问题

    [myTimer invalidate]; myTimer = nil;

这也是NSTimer上最权威的主题,请看一下。 How do I use NSTimer?

答案 1 :(得分:0)

如果不再需要,您可以使用performSelectorWithObjectAfterDelay然后使用cancelPerformSelector中止它。我认为这比scheduledTimerWithTimeInterval更容易,因为您不需要存储对计时器的引用。在大多数情况下,这两种方法的行为应该相同。