NSTimer 超时 block回调

作者: 林大鹏 | 来源:发表于2016-12-08 11:01 被阅读141次

最近做直播,由于经常用到定时器进行各种比如说心跳报文发送、进入后台2分钟自动关闭直播等操作,所以经常用到定时器的超时限制(即输入定时间隔和超时次数,定时器判断重复次数超过定时次数,清空定时次数,回调block,进入下一次循环),所以参考了这篇文章:

ios 给NSTimer添加Block回调版本创建方法

一、NSTimer+Extention.h

//  DeJiaIM
//  Created by fjf on 2016/12/6.
//  Copyright © 2016年 tsningning. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef void(^NSTimerBlock)(void);

@interface NSTimer (Extention)

/**
 设置定时器

 @param interval 定时间隔
 @param repeats 是否重复
 @param callback 回调
 @return 返回定时器
 */
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval
                                repeats:(BOOL)repeats
                               timerCallback:(NSTimerBlock)callback;

/**
 设置定时器

 @param interval 定时间隔
 @param repeats 是否重复
 @param limitCount 超时次数
 @param timerCallback 回调
 @return 返回定时器
 */
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval
                                repeats:(BOOL)repeats
                             limitCount:(NSInteger)limitCount
                               timerCallback:(NSTimerBlock)timerCallback;
@end

二、NSTimer+Extention.m

//
//  NSTimer+Extention.m
//  DeJiaIM
//
//  Created by fjf on 2016/12/6.
//  Copyright © 2016年 tsningning. All rights reserved.
//

#import "NSTimer+Extention.h"

@implementation NSTimer (Extention)

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval
                                repeats:(BOOL)repeats
                               timerCallback:(NSTimerBlock)timerCallback {

    return [NSTimer scheduledTimerWithTimeInterval:interval
                                        target:self
                                      selector:@selector(onTimerUpdateBlock:)
                                      userInfo:[timerCallback copy]
                                       repeats:repeats];
}

+ (void)onTimerUpdateBlock:(NSTimer *)timer {
    NSTimerBlock block = timer.userInfo;

    if (block) {
        block();
    }
}



+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval
                                  repeats:(BOOL)repeats
                                  limitCount:(NSInteger)limitCount
                               timerCallback:(NSTimerBlock)timerCallback {
    NSDictionary *userInfo = @{@"timerCallback"     : [timerCallback copy],
                           @"limitCount"        : @(limitCount)};

    return [NSTimer scheduledTimerWithTimeInterval:interval
                                        target:self
                                      selector:@selector(beyoudLimitTime:)
                                      userInfo:userInfo
                                       repeats:repeats];
}

+ (void)beyoudLimitTime:(NSTimer *)timer {
    static NSUInteger currentCount = 0;

    NSDictionary *userInfo = timer.userInfo;
    NSTimerBlock timerCallBack = userInfo[@"timerCallback"];
    NSNumber *count = userInfo[@"limitCount"];

    currentCount ++;

    if (currentCount > count.integerValue) {
        if (timerCallBack) {
            currentCount = 0;
            timerCallBack();
        }
    }
}

三.最后:

送上一张喜欢的图片:

向往.jpg

如果觉得不错,麻烦给个喜欢或star,如果有问题请及时反馈,谢谢!

相关文章

  • NSTimer 超时 block回调

    最近做直播,由于经常用到定时器进行各种比如说心跳报文发送、进入后台2分钟自动关闭直播等操作,所以经常用到定时器的超...

  • 回调与对象所有权问题(引用循环)简析

    关键词 回调,引用循环,通知中心,观察者,委托,目标,NSTimer,Block What 符合如下情形的回调将出...

  • NStimer定时器的block回调

    把平时常用的定时器封装成block形式,调用起来更加方便。demo 代码: typedef void (^MKTi...

  • iOS block 防循环引用

    一般来说我们总会在设置Block之后,在合适的时间回调Block,而不希望回调Block的时候Block已经被释放...

  • block回调

    每个刚接触OC的童鞋们,对block的使用都很头痛。 block是一个闭包,类似于函数,但是我们调用的时候传递的是...

  • block回调

    1.第一步:定义block指针@property (nonatomic,copy) void(^cateGoryB...

  • [swift]回调block回调

    在OC中习惯应用block进行事件回调,到swift中依然想找到这种简洁的回调事件,下面将介绍如何在swift中使...

  • 使用NSTimer实现App回到桌面再进入时刷新倒计时的功能

    NSTimer的创建就不在这里说明了,这里我使用NSTimer的一个分类,将回调方法封装在一个block中。 NS...

  • iOS 多播委托

    iOS回调有Delegate,NSNotificationCenter,block,kvo。但是项目中回调 有种情...

  • 文章目录

    block block内强引用导致的内存泄露 NStimer UITableView滚动式NSTimer停止计数 ...

网友评论

    本文标题:NSTimer 超时 block回调

    本文链接:https://www.haomeiwen.com/subject/qmrjmttx.html