使用performSelector設計最簡單的重發機制
阿新 • • 發佈:2018-12-22
重發機制
在對網路進行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:方法