计时器基本:
30秒执行
//计时器
@property (strong,nonatomic)NSTimer *OpenTim;
_OpenTim = [NSTimer scheduledTimerWithTimeInterval:30.f target:self selector:@selector(OpenTimeCk) userInfo:nil repeats:YES];
#pragma mark -- 计时器
-(void)OpenTimeCk{
NSLog(@"----------结束-----------------------");
// [[MBProgressHUDManager manger] remove];
[_OpenTim invalidate];
_OpenTim = nil;
}
https://blog.csdn.net/a787188834/article/details/79802501
计时器:后台持续计时
####计算用户使用某产品时间间隔,每隔1分钟显示在手机上
情况:1。如果 用本地时间startdate 和 enddate 相减 ,用户换手机那么显示就错了。
2.如果startdate是后台获取,enddate是手机,相减 ,用户改变手机系统时间显示就错了。
3.如果如果startdate是后台获取,enddate是网络时间。那么每一分钟就请求一次网络,太无良了,浪费流量。
4.可以这样写。startdate 是后台获取,计时器每分钟请求一次enddate。当用户关闭手机进入后台停止计时器,重新激活时开启计时器,刷新一次计时器。
这样时间间隔是对的,又不会费流量。
ios NSTimer只执行一次甚至不执行问题
[self performSelectorOnMainThread:@selector(addScrollTimer) withObject:nil waitUntilDone:NO];
_scrollViewTimer = [NSTimer timerWithTimeInterval:5.0f target:self selector:@selector(scrollTimerClick) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:_scrollViewTimer forMode:NSRunLoopCommonModes];
ios NSTimer 停不下来,即使界面已经消失还是会执行 。
我们想要的效果:当页面消失,如果还没到时间就不在执行
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[_OpenTim setFireDate:[NSDate distantFuture]];//关闭计时器
[_OpenTim invalidate];//销毁
_OpenTim = nil;
}
//开启定时器
[myTimer setFireDate:[NSDate distantPast]];
网友评论