延迟后执行方法并取消它

时间:2013-11-27 10:41:06

标签: ios iphone objective-c

我想在2.0秒之后执行方法,但我想能够在5秒之前取消它,如果另一个调用,但我注意到cancelPreviousPerformRequestsWithTarget发送对象nil和performSelector发送对象{ {1}}。

它会出问题吗?

NSString

2 个答案:

答案 0 :(得分:6)

根据文档,如果您通过nil,则只会取消使用nil执行的请求。你应该存储以前的值。

  

先前使用performSelector注册的请求的参数:withObject:afterDelay:instance方法。使用isEqual:确定参数相等性,因此该值不必与最初传递的对象相同。传递nil以匹配最初作为参数传递的nil请求。

另外,如果您只使用此选择器进行延迟,则可以调用

[NSObject cancelPreviousPerformRequestsWithTarget:self]

这将取消之前发送给自己的所有请求

答案 1 :(得分:0)

您可以手动执行此操作:

为您的代码添加BOOL值,默认值为NO,如果进行了其他调用,则将其值更改为YES

在您的startRecordAfterDelay:(NSString*)name方法中,检查BOOL的值,如果是NO,请继续操作,else忽略该呼叫。