(1)两种为NSURLConnection设置代理方式的区别

    //第一种设置方式:
//通过该方法设置代理,会自动的发送请求
// [[NSURLConnection alloc]initWithRequest:request delegate:self]; //第二种设置方式:
//设置代理,startImmediately为NO的时候,该方法不会自动发送请求
NSURLConnection *connect = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];
//手动通过代码的方式来发送请求
//注意该方法内部会自动的把connect添加到当前线程的RunLoop中在默认模式下执行
[connect start];

(2)如何控制代理方法在哪个线程调用

    //说明:默认情况下,代理方法会在主线程中进行调用(为了方便开发者拿到数据后处理一些刷新UI的操作不需要考虑到线程间通信)
//设置代理方法的执行队列
[connect setDelegateQueue:[[NSOperationQueue alloc]init]];

(3)开子线程发送网络请求的注意点,适用于自动发送网络请求模式


//在子线程中发送网络请求-调用startf方法发送
-(void)createNewThreadSendConnect1
{
//1.创建一个非主队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //2.封装操作,并把任务添加到队列中执行
[queue addOperationWithBlock:^{ NSLog(@"%@",[NSThread currentThread]);
//2-1.确定请求路径
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=dd&pwd=ww&type=JSON"]; //2-2.创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url]; //2-3.使用NSURLConnection设置代理,发送网络请求
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES]; //2-4.设置代理方法在哪个队列中执行,如果是非主队列,那么代理方法将再子线程中执行
[connection setDelegateQueue:[[NSOperationQueue alloc]init]]; //2-5.发送网络请求
//注意:start方法内部会把当前的connect对象作为一个source添加到当前线程对应的runloop中
//区别在于,如果调用start方法开发送网络请求,那么再添加source的过程中,如果当前runloop不存在
//那么该方法内部会自动创建一个当前线程对应的runloop,并启动。
[connection start]; }];
} //在子线程中发送网络请求-自动发送网络请求
-(void)createNewThreadSendConnect2
{
NSLog(@"-----");
//1.创建一个非主队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //2.封装操作,并把任务添加到队列中执行
[queue addOperationWithBlock:^{ //2-1.确定请求路径
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=dd&pwd=ww&type=JSON"]; //2-2.创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url]; //2-3.使用NSURLConnection设置代理,发送网络请求
//注意:该方法内部虽然会把connection添加到runloop,但是如果当前的runloop不存在,那么不会主动创建。
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; //2-4.设置代理方法在哪个队列中执行,如果是非主队列,那么代理方法将再子线程中执行
[connection setDelegateQueue:[[NSOperationQueue alloc]init]]; //2-5 创建当前线程对应的runloop,并开启
[[NSRunLoop currentRunLoop]run];
}];
}

NSURLConnection和Runloop(面试)的更多相关文章

  1. NSURLConnection和Runloop

    - 1.1 涉及知识点(1)两种为NSURLConnection设置代理方式的区别 //第一种设置方式: //通过该方法设置代理,会自动的发送请求 // [[NSURLConnection alloc ...

  2. ios开发网络学习六:设置队列请求与RunLoop

    #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> ...

  3. NSURLConnection使用

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  4. iOS 模式详解—「runtime面试、工作」看我就 🐒 了 ^_^.

    引导 Copyright © PBwaterln Unauthorized shall not be *copy reprinted* . 对于从事 iOS 开发人员来说,所有的人都会答出「runti ...

  5. iOS开发系列-NSURLConnection

    概述 NSURLConnection是负责发送请求,建立客户端与服务端的连接.发送数据给服务器,并收集来自服务器的响应数据.其中NSURLRequest类是用来封装一个请求,包含NSURL对象.请求方 ...

  6. iOS面试知识集锦

    最近在面试iOS应聘者过程中,发现很多面试者基础都比较薄弱,但是项目经验都写的很多,问几个问题基本上就可以了解大概的情况了,今天看到cocoachina上这篇面试题不错,分享给大家~~~ OC的理解与 ...

  7. iOS开发——面试指导

    iOS面试指导 一 经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案. 1. ...

  8. BAT面试的准备—iOS篇

    本文主要用于记录在准备BAT面试中关于iOS遇到的问题和做一些相关面试题的笔记 iOS网络层设计 1.网络层和业务层的对接设计 使用哪种交互模式来和业务层对接 : 使用Delegate为主,目的是为了 ...

  9. iOS面试必备-iOS基础知识

    近期为准备找工作面试,在网络上搜集了这些题,以备面试之用. 插一条广告:本人求职,2016级应届毕业生,有开发经验.可独立开发,低薪求职.QQ:895193543 1.简述OC中内存管理机制. 答:内 ...

随机推荐

  1. TriggerBN ++

    目录 motivation settings results motivation 用两个BN(一个用于干净样本, 一个用于对抗样本), 结果当使用\(\mathrm{BN}_{nat}\)的时候, ...

  2. JSP、JSTL标签、EL表达式

    JSP.JSTL标签.EL表达式 1.EL表达式:${} 功能: 获取数据 执行运算 获取web开发的常用对象 2.JSP标签 例如: jsp标签还有很多功能,这里只列举出一种. <jsp:fo ...

  3. 编写Java程序,在硬盘中选取一个 txt 文件,读取该文档的内容后,追加一段文字“[ 来自新华社 ]”,保存到一个新的 txt 文件内

    查看本章节 查看作业目录 需求说明: 在硬盘中选取一个 txt 文件,读取该文档的内容后,追加一段文字"[ 来自新华社 ]",保存到一个新的 txt 文件内 实现思路: 创建 Sa ...

  4. Java常用的几种设计模式

    本来想写点spring相关的东西的,想来想去,先写点设计模式的东西吧 什么是设计模式?套用百度百科的话解释吧 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设 ...

  5. Swoole 中使用 Table 内存表实现进程间共享数据

    背景 在多进程模式下进程之间的内存是相互隔离的,在一个工作进程中的全局变量和超全局变量,在另一个工作进程中是无法读取和操作的. 如果只有一个工作进程,则不存在进程隔离问题,可以使用全局变量和超全局变量 ...

  6. SpringBoot 之 整合JDBC使用

    导入相关依赖: # pom.xml <dependency> <groupId>org.springframework.boot</groupId> <art ...

  7. Inside Java Newscast #1 深度解读

    本文是 Inside Java Newscast #1 的个人体验与解读.视频地址:点击这里 ⎯⎯⎯⎯⎯⎯ Chapters ⎯⎯⎯⎯⎯⎯ 0:00 - Intro 0:57 - Java 16 – ...

  8. 官方文档粗读 - Tutorial

    参考: https://www.jianshu.com/p/0d234e14b5d3 1.Connecting 我们通过 create_engine() 来链接数据库,假设我们我们采用SQLite. ...

  9. 新增访客数量MR统计之数据库准备

    关注公众号:分享电脑学习回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新)云盘目录说明:tools目录是安装包res 目录是每一个课件对应的代码和资源等doc 目录是一 ...

  10. Spark-local本地环境搭建

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6815385772254822919/ 承接上一个文档<Spark源码编译> 解压spark编译好的压缩 ...