带有任意对象的cancelPreviousPerformRequests

时间:2016-05-20 22:34:47

标签: ios objective-c nsobject nsrunloop

我正在安排一个在不久的将来用对象调用的方法,而对象只是一个随机的NSString,一旦我安排选择器就会消失。

所以我可以这样说:

[self performSelector:@selector(runMethod:) withObject:@"randomString" afterDelay:1.0f];

如果我需要取消它之前它会触发文档说使用:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(runMethod:) object:***];
  • •*唯一的问题是我不知道"对象"是的,它只是一个随机的字符串,不再存在,现在已被ARC发布。 如何使用特定选择器(在我的情况下为runMethod:)取消任何已调度的方法,但不知道"对象"?

有没有办法获取NSRunLoop中所有预定函数的列表,只需用for循环遍历它们,寻找具有特定选择器名称的函数?

2 个答案:

答案 0 :(得分:0)

如果您需要取消某些内容,您应该组织一种更好的方式来安排它们,以便您可以实际检查其安排的内容以及与之相关的详细信息。可能的解决方案是具有一组参数的自定义类。在内部,此类运行一个计时器,该计时器在指定的触发时间执行操作。这个类的一个实例数组对于搜索和取消任意项来说是微不足道的。

答案 1 :(得分:-1)

根据我的理解,如果randomString对您无用,请将nil传递给performSelector...cancelPreviousPerform...

像这样:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(runMethod) object:nil];

[self performSelector:@selector(runMethod) withObject:nil afterDelay:1.0f];