objective C中的时间限制方法

Time limit method in objective C

我有一个从服务器请求数据然后在 table 视图上显示的网络方法。但问题是当服务器没有响应或下载时间太长时,我希望能够使用已经获取的数据重新加载 table 视图。我尝试使用 performSelector:withObject:afterDelay: 方法,但即使下载完成,此方法也会执行选择器。我尝试创建一个 bool 值来确定在调用选择器时下载是否已经完成,但是如果下载已经完成,这将创建 overlap 然后用户执行了另一个选择器未执行的网络操作调用但由于这种重叠而创建错误操作。我想要一种有时间限制但可以在下载已经完成时取消的方法。实现这个的最好方法是什么?还是有最好的方法来做我想做的事?

听起来您正在寻找 NSTimer。您可以在网络 activity 开始时启动截止时间计时器,如果工作在计时器触发之前完成,则使计时器无效。

下载完成后,您可以取消 performSelector:withObject:afterDelay: 通话。比如下载完成后,可以调用

[NSObject cancelPreviousPerformRequestsWithTarget:selector:object:]

这里,target是你在performSelector:withObject:afterDelay:上调用的对象,selector是你传递的选择器,object是你传递的对象(或者nil).


或者,如果您一次只有一个 运行 的 performSelector,则可以使用一种更简单的方法:

[NSObject cancelPreviousPerformRequestsWithTarget:yourObject];
在这种情况下,

yourObject 可能会是 self