我正在使用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中设置布尔变量以识别解析是否已完成。我只是想知道这有什么重大区别吗?这个解决方案能解决我的问题吗?
如果存在其他方式,请建议我,谢谢。
答案 0 :(得分:21)
以下是您的差异
performSelectorWithObjectAfterDelay
顾名思义,在指定的秒数后执行选择器。的 ONCE 即可。
您需要注意的是,在释放执行选择器的对象之前,您需要取消之前的任何执行请求。为此使用cancelPerformSelector方法。
scheduledTimerWithTimeInterval
此方法使您能够在指定的持续时间后调用选择器,但它还有一个参数[repeats:],可让您调用相同的选择器重复
您还可以将调用传递给调用选择器,这在选择器需要大量参数时特别有用。
您需要在不再需要时使计时器无效。这应该可以解决问题
[myTimer invalidate]; myTimer = nil;
这也是NSTimer上最权威的主题,请看一下。 How do I use NSTimer?
答案 1 :(得分:0)
如果不再需要,您可以使用performSelectorWithObjectAfterDelay
然后使用cancelPerformSelector
中止它。我认为这比scheduledTimerWithTimeInterval
更容易,因为您不需要存储对计时器的引用。在大多数情况下,这两种方法的行为应该相同。