使用performSelector设计最简单的重发机制

重发机制

在对网络进行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:方法

猜你喜欢

转载自blog.csdn.net/u012380572/article/details/82453760
今日推荐