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(@"链接失败");
        }
    }
    





  • 相关阅读:
    dom2
    小程序自定义组件之省市区地址三级联动
    使用图片作为a标签的点击按钮时,当触发touchstart的时候,往往会有一个灰色的背景,想要去掉的话可以用下面这种方式
    常用UI模板,loading框,提醒框,弹框确认框
    css 超出规定行数自动隐藏
    touch.js下载使用方式
    各种文字编码解码方式大合集
    自用公共js文件
    常用UI框架
    各种HTML锚点跳转方式
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6916333.html
Copyright © 2011-2022 走看看