performselector afterdelay无法正常工作

Mar*_*tin 6 thread-safety ios ios5

我在uiview子类中使用以下方法:

[self performSelector:@selector(timeout) withObject:nil afterDelay:20];
Run Code Online (Sandbox Code Playgroud)

按预期在20秒后调用该方法.在另一种方法中,我尝试使用以下代码取消执行请求:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(timeout) object:nil];
Run Code Online (Sandbox Code Playgroud)

我也试过了

[NSRunLoop cancelPreviousPerformRequestsWithTarget:self selector:@selector(timeout) object:nil];
Run Code Online (Sandbox Code Playgroud)

这两个消息都没有带来预期的结果,仍然会调用超时方法.任何人都能解释我的错误以及如何以正确的方式做到这一点?

来自奥地利马丁的欢呼声

Ind*_*ore 3

两点
1. 两者是self同一个对象吗?
2. 是[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(timeout) object:nil];在您调用的同一线程上执行的吗[self performSelector:@selector(timeout) withObject:nil afterDelay:20];

检查这两个问题。