重发机制
在对网络进行http请求或者物联网产业中对网关进行不断的发送数据帧时,重发机制是一个必须存在的功能,来保证用户操作的可靠性,app会不断的重复发送,直到数据成功发送,并且接受到回复帧。
performSelector
performSelector: withObject:
是在iOS中的一种方法调用方式。他可以向一个对象传递任何消息,而不需要在编译的时候声明这些方法。
而重发机制就需要用到performSelector延迟函数。
一、首先解释下performSelector方法中每个参数的意义:
- (void)performSelector:(SEL)selector withObject:(id)object afterDelay:(NSTimeInterval)delay;
(1)selector:表示你要调用的方法
(2)object:如果你要调用的方法中需要传递参数,那么object就表示你要传递的值;如果你要调用的方法不需要传递参数,那么就是nil
(3)delay:表示你要延迟的时间
二、如何进行重发
因为performSelector方法只是延时函数,所以我们使用递归。使用递归是一件很危险的事情,所以一定要谨慎使用,有几个注意事项:
1.放在子线程里,推荐使用GCD
2.必须添加判断机制,重发几次后停止重发
3.收到回复后立刻停止重发
三、具体代码实现
代码实现非常简单,只要在需要重发的函数最后加上以下代码,就可以完成递归重发,需要注意的是performSelector必须在主线程中运行,不然会失效。
dispatch_async(dispatch_get_main_queue(), ^{
[self performSelector:@selector(inquireTimer) withObject:nil afterDelay:3.f];
});
取消重发,只需要将performSelector函数取消即可,代码如下:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(didRuninCurrModel:) object:nil];
[NSObject cancelPreviousPerformRequestsWithTarget:self];//取消所有的performSelector:方法