10

我正在使用 scheduleTimerWithTimeInterval 进行函数调用。我只是在检查特定 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 中设置布尔变量来识别解析是否完成。我只是想知道这之间有什么主要区别吗?这个解决方案是否适用于我的问题?

如果有其他方法,请建议我,谢谢。

4

2 回答 2

21

这是你的不同之处

performSelectorWithObjectAfterDelay

  • 顾名思义,在指定的秒数后执行选择器。一次

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

scheduleTimerWithTimeInterval

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

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

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

    [myTimer 无效]; 我的计时器 = 零;

这也是 NSTimer 上最权威的线程,请看一下。如何使用 NSTimer?

于 2011-11-23T11:04:50.227 回答
0

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

于 2011-11-18T03:57:12.267 回答