RunLoop -- 在实际开发中的应用

2020-04-11  本文已影响0人  踩坑小分队
1、控制线程生命周期<线程保活>

线程保活

2、解决NSTimer在滑动时失效的问题

当scrollView滑动的时候,定时器会发现失效

static int count = 0;
[NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
    NSLog(@"count == %d",count++);
}];

原因:
NSTimer在RunLoop的Mode是NSDefaultRunLoopMode中的,
当滑动的时候RunLoop会切换到UITrackingRunLoopMode,所以NSTimer会失效。

解决:
将Timer添加到NSRunLoopCommonModes模式下面

NSTimer *timer = [NSTimer timerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
    NSLog(@"count == %d",count++);
}];
    
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

扩展:
NSRunLoopCommonModes 不是一种真正的Mode,Mode有两种
UITrackingRunLoopMode
NSDefaultRunLoopMode
NSRunLoopCommonModes可以认为是一种标记,这个标记包含UITrackingRunLoopMode和NSDefaultRunLoopMode

RunLoop和Timers的关系:
RunLoop中有一堆的Mode,Mode中存在着Timers

3、监控应用卡顿
4、性能优化

上一篇 下一篇

猜你喜欢

热点阅读