1.将NSTimer加入NSRunLoopCommonModes避免与主Runloop竞争
两个Runloop:
-
NSDefaultRunLoopMode
: 用于UI的渲染 -
NSRunLoopCommonModes
:将NSTimer加入到这个Runloop,如果不特别声明,NSTimer会在默认的Runloop运行,造成有UISrollView时,滑动Scrollview,DefaultRunLoop用于渲染ScrollView,就不会继续NSTimer,NSTimer会停止。
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateLastTime:)
userInfo:nil
repeats:YES];
[[NSRunLoop currentRunLoop]addTimer: timer forMode:NSRunLoopCommonModes];
2.NSTimer使用完之后手动销毁
在使用完NSTimer之后就手动调用[timer invalidate]
销毁NSTimer,不要等到在- (void)dealloc{}
方法中销毁。
- (void)backAction{
[timer invalidate];
timer = nil;
[self dismissViewControllerAnimated:YES completion:nil];
}