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

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

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

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

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


  1. //在子线程中发送网络请求-调用startf方法发送
  2. -(void)createNewThreadSendConnect1
  3. {
  4. //1.创建一个非主队列
  5. NSOperationQueue *queue = [[NSOperationQueue alloc]init];
  6. //2.封装操作,并把任务添加到队列中执行
  7. [queue addOperationWithBlock:^{
  8. NSLog(@"%@",[NSThread currentThread]);
  9. //2-1.确定请求路径
  10. NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=dd&pwd=ww&type=JSON"];
  11. //2-2.创建请求对象
  12. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  13. //2-3.使用NSURLConnection设置代理,发送网络请求
  14. NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
  15. //2-4.设置代理方法在哪个队列中执行,如果是非主队列,那么代理方法将再子线程中执行
  16. [connection setDelegateQueue:[[NSOperationQueue alloc]init]];
  17. //2-5.发送网络请求
  18. //注意:start方法内部会把当前的connect对象作为一个source添加到当前线程对应的runloop中
  19. //区别在于,如果调用start方法开发送网络请求,那么再添加source的过程中,如果当前runloop不存在
  20. //那么该方法内部会自动创建一个当前线程对应的runloop,并启动。
  21. [connection start];
  22. }];
  23. }
  24. //在子线程中发送网络请求-自动发送网络请求
  25. -(void)createNewThreadSendConnect2
  26. {
  27. NSLog(@"-----");
  28. //1.创建一个非主队列
  29. NSOperationQueue *queue = [[NSOperationQueue alloc]init];
  30. //2.封装操作,并把任务添加到队列中执行
  31. [queue addOperationWithBlock:^{
  32. //2-1.确定请求路径
  33. NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=dd&pwd=ww&type=JSON"];
  34. //2-2.创建请求对象
  35. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  36. //2-3.使用NSURLConnection设置代理,发送网络请求
  37. //注意:该方法内部虽然会把connection添加到runloop,但是如果当前的runloop不存在,那么不会主动创建。
  38. NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
  39. //2-4.设置代理方法在哪个队列中执行,如果是非主队列,那么代理方法将再子线程中执行
  40. [connection setDelegateQueue:[[NSOperationQueue alloc]init]];
  41. //2-5 创建当前线程对应的runloop,并开启
  42. [[NSRunLoop currentRunLoop]run];
  43. }];
  44. }

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. SuperPixel

    目录 SLIC Superpixel algorithm 距离函数的选择 代码 Gonzalez R. C. and Woods R. E. Digital Image Processing (For ...

  2. N-Empress

    全排列 基本思想:递归.散列 代码实现 #include<cstdio> const int maxn = 11; int n, P[maxn], hashTable[11] = {fal ...

  3. JUC之集合中的线程安全问题

    集合线程安全问题 JDK Version:9 首先说下集合线程安全是什么:当多个线程对同一个集合进行添加和查询的时候,出现异常错误. 复现例子: package com.JUC; import jav ...

  4. javaScript系列 [43]-TS、Class and ES5

    本文讨论Typescript中的Class同ES5构造函数的对应关系,涉及TypeScript的诸多语法.构造函数.面向对象以及原型对象等相关知识点细节,本文只简单对比并不进行深入展开. TypeSc ...

  5. VMware客户端vSphereClient新建虚拟机

    1.说明 VMware客户端工具vSphere Client, 用来连接和管理ESX或ESXi主机(下面称为宿主机), 可以方便的创建.管理虚拟机,并分配相应的资源.宿主机就是使用虚拟化软件运行虚拟机 ...

  6. [学习笔记] IT项目管理 - 挣值管理(EVM)

    挣值管理(EVM) 挣值管理(Earned Value Management, EVM)是成本管理里面较为重点的知识点,但是也可以用来综合考察项目范围.进度和成本绩效,经常需要做相关计算. 基本概念P ...

  7. 适配器模式(pthon)

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # adapter_pattern.py # 适配器模式 class Adaptee: def reque ...

  8. Centos7上传文件和下载文件命令

    https://www.cnblogs.com/patrick-yeh/p/12922829.html 使用工具:SecureCRT 或 Xshell 步骤一:安装lrzsz软件,root权限下.安装 ...

  9. [ vue ] Quasar封装q-dialog组件,在外层实现弹出框的开启和关闭

    场景描述: 见:https://www.cnblogs.com/remly/p/12981582.html 具体实现: <!-- 父组件 --> <template> < ...

  10. 去掉所有包含this或is的行

    题目描述 写一个 bash脚本以实现一个需求,去掉输入中含有this的语句,把不含this的语句输出 示例: 假设输入如下: that is your bag is this your bag? to ...