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

本文详细介绍了AFNetworking网络请求的实现原理,包括通过线程和RunLoop管理网络请求任务,以及如何在UITableView滚动停止后延迟加载图片以提高用户体验。此外还提供了一种App崩溃后立即重启的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}  
}

 

 

转载于:https://www.cnblogs.com/HackHer/p/6160356.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值