0

我安排一个NSTimer这样的实例:

    [NSTimer scheduledTimerWithTimeInterval:.2 target:self selector:@selector(someMethod) userInfo:nil repeats:YES];

我可以叫invalidateNSTimer阻止它开火,但是

    [NSTimer cancelPreviousPerformRequestsWithTarget:self];

不停止计时器。我已经检查过并且[NSRunLoop currentRunLoop]完全一样(正如预期的那样,这些是对用户点击的响应),当然self实例总是相同的。为什么不cancel取消?

4

1 回答 1

3

cancelPreviousPerformRequestsWithTarget:是 NSObject 方法,而不是 NSTimer 方法,它是 NSObjectperformSelector:方法的逆。

[NSTimer cancelPreviousPerformRequestsWithTarget:self]与 相同[NSObject cancelPreviousPerformRequestsWithTarget:self],它取消的是任何以前的[self performSelector:… withObject:… afterDelay:…]消息。它与任何 NSTimer 实例无关。

将消息发送到 NSTimer 类而不是 NSObject 类的工作方式与发送alloc到类的方式相同。没有类覆盖它;它之所以有效,是因为 NSObject 的实现是继承的,并且出于同样的原因它做同样的事情。

于 2011-09-28T22:13:03.820 回答