iOS获取时间间隔的三种方式

iOS获取时间间隔的三种方式

1.NSDate的timeIntervalSinceDate方法。

假设25秒内轮询(递归调用)某个接口:获取时间间隔小于25秒

+(void)queryData:(NSDictionary *)params withQuerySuccessComplete:(void (^)(BOOL success,DYRequestModel *model,NSError *error))complete
{
     [DYTransferManager shared].querySuccessBlock = complete;
     [DYTransferManager shared].beforeDate = [NSDate date];
    [self sendQueryRequestParams:params];
}
+(void)sendQueryRequestParams:(NSDictionary *)params{
    if (params == nil) {
        return;
    }
    DYRequest *request = [DYTransferRequestFactory queryResultRequestWithParams:params];
    [request.signal subscribeNext:^(id x) {
        DYRequestModel *requestModel = (DYRequestModel *)x;
        [DYTransferManager shared].nowDate = [NSDate date];
         int requestInterval = (int)ceil([[DYTransferManager shared].nowDate timeIntervalSinceDate:[DYTransferManager shared].beforeDate]);
        if ([requestModel.data[@"status"] isEqualToString:@"1"] && requestInterval <= 25) {
            [self sendQueryRequestParams:params];
        }
        else
        {
            if([DYTransferManager shared].querySuccessBlock) [DYTransferManager shared].querySuccessBlock(YES,requestModel,nil);
        }
        
    } error:^(NSError *error) {
        [DYTransferManager shared].nowDate = [NSDate date];
        int requestInterval = (int)ceil([[DYTransferManager shared].nowDate timeIntervalSinceDate:[DYTransferManager shared].beforeDate]);
        if(requestInterval <= 25)
        {
            [self sendQueryRequestParams:params];
        }
        else
        {
            if([DYTransferManager shared].querySuccessBlock) [DYTransferManager shared].querySuccessBlock(NO,nil,error);
        }
    }];
}

2.CFTimeInterval的CACurrentMediaTime()方法

static CFTimeInterval currentTimer = 0;
+(void)queryData:(NSDictionary *)params withQuerySuccessComplete:(void (^)(BOOL success,DYRequestModel *model,NSError *error))complete
{
     [DYTransferManager shared].querySuccessBlock = complete;
    [self sendQueryRequestParams:params];
}
+(void)sendQueryRequestParams:(NSDictionary *)params{
    if (params == nil) {
        return;
    }
     if (currentTimer == 0) {
        currentTimer = CACurrentMediaTime();
    }
    DYRequest *request = [DYTransferRequestFactory queryResultRequestWithParams:params];
    [request.signal subscribeNext:^(id x) {
        DYRequestModel *requestModel = (DYRequestModel *)x;
        CFTimeInterval nowTimer = CACurrentMediaTime();
        if ([requestModel.data[@"status"] isEqualToString:@"1"] && nowTimer - currentTimer <= 25) {
            [self sendQueryRequestParams:params];
        }
        else
        {
            if([DYTransferManager shared].querySuccessBlock) [DYTransferManager shared].querySuccessBlock(YES,requestModel,nil);
        }
        
    } error:^(NSError *error) {
        CFTimeInterval nowtimer = CACurrentMediaTime();
        if(nowtimer - currentTimer <= 25)
        {
            [self sendQueryRequestParams:params];
        }
        else
        {
            if([DYTransferManager shared].querySuccessBlock) [DYTransferManager shared].querySuccessBlock(NO,nil,error);
        }
    }];
}

3.CFAbsoluteTime的CFAbsoluteTimeGetCurrent()方法

static CFAbsoluteTime currentTimer = 0;
+(void)queryData:(NSDictionary *)params withQuerySuccessComplete:(void (^)(BOOL success,DYRequestModel *model,NSError *error))complete
{
     [DYTransferManager shared].querySuccessBlock = complete;
    [self sendQueryRequestParams:params];
}
+(void)sendQueryRequestParams:(NSDictionary *)params{
    if (params == nil) {
        return;
    }
     if (currentTimer == 0) {
        currentTimer = CFAbsoluteTimeGetCurrent();
    }
    DYRequest *request = [DYTransferRequestFactory queryResultRequestWithParams:params];
    [request.signal subscribeNext:^(id x) {
        DYRequestModel *requestModel = (DYRequestModel *)x;
        CFAbsoluteTime nowTimer = CFAbsoluteTimeGetCurrent();
        if ([requestModel.data[@"status"] isEqualToString:@"1"] && nowTimer - currentTimer <= 25) {
            [self sendQueryRequestParams:params];
        }
        else
        {
            if([DYTransferManager shared].querySuccessBlock) [DYTransferManager shared].querySuccessBlock(YES,requestModel,nil);
        }
        
    } error:^(NSError *error) {
        CFAbsoluteTime nowtimer = CFAbsoluteTimeGetCurrent();
        if(nowtimer - currentTimer <= 25)
        {
            [self sendQueryRequestParams:params];
        }
        else
        {
            if([DYTransferManager shared].querySuccessBlock) [DYTransferManager shared].querySuccessBlock(NO,nil,error);
        }
    }];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 在iOS开发过程中,经常会和时间打交道。例如用户在一个页面停留的时间、两个方法哪个执行更快等等。之前对于这部...
    WQ_UESTC阅读 3,471评论 0 12
  • 转自:iOS关于时间的处理 做App避免不了要和时间打交道,关于时间的处理,里面有不少门道,远不是一行API调用,...
    咖啡绿茶1991阅读 702评论 0 0
  • 做App避免不了要和时间打交道,关于时间的处理,里面有不少门道,远不是一行API调用,获取当前系统时间这么简单。我...
    MrPeak阅读 4,671评论 0 42
  • 主要有以下几个类: NSDate:表示一个具体的绝对的时间点。NSTimeZone:表示时区信息。NSLocale...
    献国阅读 5,319评论 0 4
  • iOS 时间获取的三种方式(不只这三种) NSDate CFAbsoluteTimeGetCurrent() CA...
    glView阅读 813评论 0 2