• RunLoop的使用--AFNetworking的网络线程实现+tableView延迟加载图片+App崩溃后立即重启


    AFNetworking的网络线程实现

    + (void)networkRequestThreadEntryPoint:(id)__unused object{
    //放进自动释放池
    @autoreleasepool{
        //获取当前的线程
        [[NSThread currentThread] setName:@"AFNetworking"];
        //设置NSRunLoop循环检测,检测inputSource,time source同步事件
        //runloopmode是一个集合:监听事件源,定时器和需通知的runLoop observer
        //NSMachPort 是监听的事件源    
        NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
        [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
        [runLoop run];
    }
    }    
    
    //设定该线程为单例,只初始化一次
    + (NSThread*)networkRequestThread{
      static NSThread *_networkRequestThread = nil;
      static dispatch_once_t oncePredicate;
      dispatch_once(&oncePredicate,^{
            _networkRequestThread = [[NSThread alloc] initWithTarget:self selector:@selector(networkRequestThreadEntryPoint:) object:nil];
            [_networkRequestThread start];
        });      
        
        
        return _networkRequestThread;
    }       

    tableView延迟加载图片

    tableView的cell中如果有ImageView,在滚动时更新图片可能造成卡顿现象,可以在tableView滚动停止后设置图片内容:

    UIImage *image = ...;
    [self.headerImageView performSelector:@selector(setImage:) withObject:image afterDelay:0 inModes:@[NSDefaultRunLoopMode]];

    App崩溃后立即重启

    //保存当前RunLoop 中的所有modes,,然后进行恢复
    CFRunLoopRef runLoop = CFRunLoopGetCurrent();
    NSArray *allModes = CFBridgingRelease(CFRunLoopCopyAllModes(runLoop));
    while(true){
      for(NSString *mode in allModes){
        CFRunLoopRunInMode((CFStringRef)mode,1/MAXFLOAT,false);
    }  
    }

     

  • 相关阅读:
    Static了解和复习继承。
    复习篇1.对象和封装
    第一章笔记
    A + B Problem II
    Number Sequence
    Fibonacci Again
    8615 快乐
    8635 气球
    大牛之路II
    8617 阶乘数字和
  • 原文地址:https://www.cnblogs.com/HackHer/p/6160356.html
Copyright © 2020-2023  润新知