笔记 RunLoop
2023-03-14 本文已影响0人
失忆的程序员
什么是RunLoop?
从字面上理解,RunLoop是个运行循环。
其实它内部就是do-while循环,在这个循环内部不断的处理各种任务(比如Source\Timer\Observer)
一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop需要手动启动(调用run方法)
RunLoop只能选择一个mode启动,如果当前mode中没有任何Soure\Timer\Observer,那么就直接退出RunLoop
在开发中如何使用RunLoop?什么应用场景?
场景一:解决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];