ios 计算两个时间相差秒数_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);

}

}];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值