第43月第17天 iOS 子线程开启、关闭runloop performSelector

1.

dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
        [self performSelector:@selector(asdf) withObject:nil afterDelay:1];
        
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    });

-(void)asdf
{
    CFRunLoopStop([NSRunLoop currentRunLoop].getCFRunLoop);
    
    dispatch_sync(dispatch_get_global_queue(0, 0), ^{
        [self performSelector:@selector(asdasd) withObject:nil afterDelay:5];
    });
}

-(void)asdasd
{
    //runloop已关闭,不会执行。
}

 

https://www.jianshu.com/p/8e6d51f69ca3

 

额外:当主线程在处理一些滑动操作是,会暂停定时器中的动作,通过修改mode,防住 主线程滑动等事件阻碍了定时器中的事件;

timer = [NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(SendHeartBeat) userInfo:nil repeats:YES];
 [[NSRunLoop mainRunLoop] addTimer:heartTimer forMode:NSRunLoopCommonModes];

https://www.cnblogs.com/lolDragon/articles/5893375.html


posted @ 2020-04-17 17:49  lianhuaren  阅读(267)  评论(0编辑  收藏  举报