zoukankan      html  css  js  c++  java
  • NSURLConnection和NSRunLoop


    主线程中创建一个NSURLConnection并异步运行

    [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:YES];
    - (void)start
    {
        //step 1:请求地址
        NSURL *url = [NSURL URLWithString:@"www.2cto.com"];
        //step 2:实例化一个request
        NSURLRequest *request =[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
        //step 3:创建链接
        self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];//直接执行了
        if (self.connection) {
            NSLog(@"链接成功");
        }else {
            NSLog(@"链接失败");
        }
    }

    问题:
    当前线程是主线程
    创建的NSURLConnection实例执行在主线程。主线程有一个执行的runloop实例来支持NSURLConnection的异步执行,
    此时runloop的执行模式为NSDefaultRunLoopMode,这样的mode下,假设主线程执行拖动操作,runloop不处理NSURLConnection的回调事件。
    由于拖动操作发生过程中。使当前线程的runloop执行在UITrackingRunLoopMode模式下,这样的模式下的runloop会暂定处理其它事件(异步请求回调、timer事件等)。


    解决方法,改动代码为:

    [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:YES];
    - (void)start
    {
        //step 1:请求地址
        NSURL *url = [NSURL URLWithString:@"www.2cto.com"];
        //step 2:实例化一个request
        NSURLRequest *request =[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
        //step 3:创建链接
        self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];//临时不执行
        [connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];//用NSRunLoopCommonModes
        [connection start];    
        if (self.connection) {
            NSLog(@"链接成功");
        }else {
            NSLog(@"链接失败");
        }
    }
    





  • 相关阅读:
    spring boot 整合elasticsearch
    elasticsearch 高级查询
    elasticsearch 基本操作
    day9--回顾
    day9--多线程与多进程
    day9--paramiko模块
    day10--异步IO数据库队列缓存
    数据库连接池
    数据库事务的四大特性以及事务的隔离级别
    使用JDBC进行数据库的事务操作(2)
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6916333.html
Copyright © 2011-2022 走看看