iOS-延時頻率控制

停一停竟稳,等一等

場景描述:在一個UITableView中, 點擊某些cell需要刷新表熊痴,但是當(dāng)我連續(xù)點擊這些cell的時候,我不想tableView 連續(xù)執(zhí)行刷新操作果善,因為這樣很浪費內(nèi)存,但是我需要做后一次點擊后巾陕,這個tableView執(zhí)行了刷新操作,于是我寫了一個頻率控制器[歡迎大家指點噢]

//
//  QKTimeDelay.h
//  EasyIOS
//
//  Created by EasyIOS on 16/7/8.
//  Copyright ? 2016年 EasyIOS. All rights reserved.
//

#import <Foundation/Foundation.h>

/**
 *  延時控制
 */
@interface QKTimeDelay : NSObject
/**
 *  開啟一個延時器
 *
 *  @param delayLong 單位為毫秒【調(diào)用時間間隔】
 *
 *  @return 延時器
 */
+ (QKTimeDelay *)start:(NSUInteger )delayLong;
/**
 *  到了延時時間了
 */
@property (nonatomic,copy) void (^toTime)();
/**
 *  外部需要延時的方法調(diào)用此方法 
 *  條件達(dá)到后會調(diào)用 toTime 回調(diào)
 */
- (void)delayMethod;
@end

在需要使用頻率控制的地方鄙煤,調(diào)用start可以生成一個頻率/延時控制器,以后在調(diào)用需要控制頻率的方法梯刚,我們不調(diào)用本身的方法凉馆,改用delayMethod预愤,在toTime的回調(diào)中我們在調(diào)用那個被控制了的方法植康。

/**************************************************
 NSTimeInterval double 類型的數(shù)據(jù) 小數(shù)點前面是秒數(shù)
 所以想取到毫秒數(shù) X 1000就可以了
 
***************************************************/
#import "QKTimeDelay.h"

@interface QKTimeDelay ()

/**
 *  上一次刷新的時間
 */
@property (nonatomic,assign)NSTimeInterval firstTime;

/**
 * 當(dāng)前時間的毫秒數(shù)
 */
@property (nonatomic,assign)NSTimeInterval now;

/**
 *  延時的時長 單位為毫秒
 */
@property (nonatomic,assign)NSUInteger delayTime;

/**
 *  是否已經(jīng)有了任務(wù)
 */
@property (nonatomic,assign)BOOL hasTarget;

@end

/**
 *  延時控制
 */
@implementation QKTimeDelay

/**
 *  開啟一個延時器
 *
 *  @param delayLong 單位為毫秒【調(diào)用時間間隔】
 *
 *  @return 延時器
 */
+ (QKTimeDelay *)start:(NSUInteger )delayLong
{
    QKTimeDelay *timeDelay = [[QKTimeDelay alloc] init];
    
    //初始化時間
    timeDelay.firstTime = [[NSDate date] timeIntervalSince1970];
    
    //設(shè)置延時的時長
    timeDelay.delayTime = delayLong;
    
    
    return timeDelay;
}

- (void)delayMethod
{
    if (self.hasTarget)
        return;
        
   
    //還沒有開啟定時任務(wù)
    self.now = [[NSDate date] timeIntervalSince1970];
    if ((self.now - self.firstTime) > self.delayTime)
    {
        //可以直接調(diào)用方法啦
        [self openMethod];
        return;
        
    }else
    {
        //開啟定時任務(wù)
        [self startBackTarget];
        return;
    }
        
}

/**
 *  開啟被延時的方法
 */
- (void)openMethod
{
    if (self.toTime)
        self.toTime();
    
    NSDate *now = [NSDate date];
    self.firstTime = [now timeIntervalSince1970];
    self.now = self.firstTime;
    self.hasTarget = NO;
}

/**
 *  開啟一個定時任務(wù)
 */
- (void)startBackTarget
{

    self.hasTarget = YES;
    
    [self performSelector:@selector(openMethod)
               withObject:nil
               afterDelay:haoMiaoToMiao(self.delayTime)];
}

/**
 *  毫秒--》秒
 *
 *  @param haoMiao 毫秒數(shù)
 *
 *  @return 秒數(shù)
 */
NSTimeInterval haoMiaoToMiao(NSTimeInterval haoMiao)
{
    return (haoMiao/1000);
}

@end

頻率控制器的實現(xiàn)基本思路是:在我開啟一個頻率控制器后,紀(jì)錄一下當(dāng)前的時間和我的延遲的時長存崖,當(dāng)外部調(diào)用我們的延遲方法(也就是控制頻率的方法)我們先看看是不是已經(jīng)在后臺開啟了一個方法等待調(diào)用被控制的方法,如果有了就不需要處理冗栗,等待后臺任務(wù)完成隅居,如果沒有葛虐,看看當(dāng)前的時間和上次刷新的時間差值是否達(dá)到了要求,如果達(dá)到了就直接調(diào)用控制方法的回調(diào)涕蚤,如果沒有就在后臺開啟一個定時任務(wù)的诵。


測試

self.timeDealy = [QKTimeDelay start:2000];
    self.timeDealy.toTime = ^{
        NSLog(@"refresh");
    };
    [self.timeDealy delayMethod];
    [self.timeDealy delayMethod];
    [self.timeDealy delayMethod];
    [self.timeDealy delayMethod];
    [self.timeDealy delayMethod];
    [self.timeDealy delayMethod];
    [self.timeDealy delayMethod];
    [self.timeDealy delayMethod];
    [self.timeDealy delayMethod];
    [self.timeDealy delayMethod];
    [self.timeDealy delayMethod];
    [self.timeDealy delayMethod];
    
    @weakify(self);
    dispatch_time_t after
     = dispatch_time(DISPATCH_TIME_NOW,
                     1820*NSEC_PER_MSEC);
    
    dispatch_after(after, dispatch_get_main_queue(),
    ^{
       @strongify(self);
        [self.timeDealy delayMethod];
        
    });
    
    [self delayLoad];

打印結(jié)果.png

總共調(diào)用了兩次申钩,dispatch開啟的任務(wù)有一次瘪阁,外面的有1次

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末管跺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子廉涕,更是在濱河造成了極大的恐慌,老刑警劉巖宠纯,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婆瓜,死亡現(xiàn)場離奇詭異贡羔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)猴蹂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來楣嘁,“玉大人,你說我怎么就攤上這事瓢省∪啵” “怎么了涤伐?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵扬舒,是天一觀的道長夜郁。 經(jīng)常有香客問我脏答,道長萍摊,這世上最難降的妖魔是什么山害? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任浪慌,我火速辦了婚禮朴则,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘汹想。我一直安慰自己,他們只是感情好古掏,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布冗茸。 她就那樣靜靜地躺著夏漱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挂绰。 梳的紋絲不亂的頭發(fā)上葵蒂,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機(jī)與錄音永高,去河邊找鬼命爬。 笑死饲宛,一個胖子當(dāng)著我的面吹牛艇抠,可吹牛的內(nèi)容都是我干的翔脱。 我是一名探鬼主播届吁,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼暂氯,長吁一口氣:“原來是場噩夢啊……” “哼痴施!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起神得,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎节榜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亿遂,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片天梧。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡冕香,死狀恐怖悉尾,靈堂內(nèi)的尸體忽然破棺而出构眯,到底是詐尸還是另有隱情惫霸,我是刑警寧澤壹店,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站老赤,受9級特大地震影響抬旺,放射性物質(zhì)發(fā)生泄漏开财。R本人自食惡果不足惜责鳍,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一正塌、第九天 我趴在偏房一處隱蔽的房頂上張望乓诽。 院中可真熱鬧,春花似錦帐姻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吼砂。三九已至,卻和暖如春拇惋,著一層夾襖步出監(jiān)牢的瞬間撑帖,已是汗流浹背胡嘿。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工衷敌, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留缴罗,地道東北人弓柱。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓航罗,卻偏偏與公主長得像粥血,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子缭嫡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 2017.02.22 可以練習(xí)笤成,每當(dāng)這個時候,腦袋就犯困纵诞,我這腦袋真是神奇呀,一說讓你做事情籽腕,你就犯困节仿,你可不要太...
    Carden閱讀 1,328評論 0 1
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫矾瘾、插件壕翩、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,025評論 4 62
  • 感恩造物主給我無條件的愛,讓我自由體驗生命的一切荐操。感恩佛力加持宅倒,感恩天使屯耸、指導(dǎo)靈,給我最佳利益的指引和幫助铺韧。感恩我...
    登泓聽香閱讀 291評論 0 0
  • 1 不管對方做了什么事割卖,買了什么新東西,都要先鼓勵和認(rèn)可罢维,然后再提出觀點丙挽,不要著急先去否定颜阐,這會讓好情緒變壞情緒凳怨。...
    小樹Fengtrees閱讀 604評論 0 0
  • 鄉(xiāng)村四月喜氣濃紫新, 唯見油菜花盛開李剖。 金黃遍野農(nóng)家樂, 八方游人賞春來篙顺。 福建省霞浦縣牙城鎮(zhèn)文洋村:油菜花開,金黃遍地德玫。
    文貝閱讀 609評論 20 22