iOS URL Loading System

苹果 URL LOADING SYSTEM 官方文档翻译 苹果开发文档的翻译(针对url 加载系统的翻译),针对需要了解url加载原理的开发者,格式为pages 苹果电脑自带软件可打开 立即下载

(一) 概述

URL Loading System 提供了访问URL指向的server端内容的能力,核心就是NSURL类。该系统提供:下载、上传、管理cookie、缓存、认证以及编写定制的协议扩展。

该系统支持以下协议:ftp://,http://,https://,file:///,data://。

(另外,iOS提供了用safari打开网页的方法,参见UIApplication的openURL:)


(二)框架图


1. URL Loading 概览

1)iOS 7 以及以后的版本,最好用NSURLSession来做URL request。

2)如果为了支持旧版本,可以用NSURLConnection来做,下载URL内容到内存(如需要,可写入硬盘)。


2. 获取内容到内存(in-memory)

1)对于简单的情况,用 NSURLSession +NSURL 就够了。

2)对于复杂情况,比如上传数据,用 NSURLSession +NSURLRequest 或者 NSURLConnection +NSURLRequest 就够了。

无论是那种方式,获取response都有两种方法:a)设置一个callback的block;b)设置一个delegate。


3. 获取内容到硬盘(on-disk)

1)对于简单的情况,用 NSURLSession +NSURL 就够了。

2)对于复杂情况,用 NSURLSession +NSURLRequest 或者 NSURLDownload +NSURLRequest 就够了。

注意:NSURLSession 比 NSURLDownload 有优势:NSURLSession可以一直下载,即使你的app被挂起了、kill掉了、或者崩溃了也不影响下载。


(三)编程API

有两种方式:NSURLSession,NSURLConnection,但NSURLConnection用起来相对简单一些。

1. 用 NSURLConnection

a)同步方式:sendSynchronousRequest:returningResponse:error:

b)异步block方式:sendAsynchronousRequest:queue:completionHandler:

c)异步delegate方式:NSURLConnectionDelegate,NSURLConnectionDownloadDelegate,NSURLConnectionDataDelegate


2. 用NSURLSession

NSURLSession比NSURLConnection爽的地方,就在于当app没有运行(挂起、终止、崩溃)的时候,依然可以在后台下载、上传。这种方式实际上是把下载任务让另外一个独立的进程干了。当下载完成后,系统就在后台启动app,并传给相应的参数以接收数据。这一部分不详细说了,可以参考资料:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html#//apple_ref/doc/uid/TP40013509-SW1


(四)常用代码

1. 用 NSURLConnection 访问 URL

NSString *urlAsString = @"http://www.cnn.com";
NSURL *url = [NSURL URLWithString:urlAsString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];


[NSURLConnection
         sendAsynchronousRequest:urlRequest
         queue:[[NSOperationQueue alloc] init] // [NSOperationQueue mainQueue]
         completionHandler:^(NSURLResponse *response,
                             NSData *data,
                             NSError *error) 
        {
         NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
         if ([data length] >0 && error == nil && [httpResponse statusCode] == 200)
         {

                        // DO YOUR WORK HERE
                        // the returned data is usually json format
                        // use NSJSONSerialization api to parse the data

         }
         else if ([data length] == 0 && error == nil)
         {
             NSLog(@"Nothing was downloaded.");
         }
         else if (error != nil){
             NSLog(@"Error = %@", error);
         }

     }];

2. 用  NSURLSession  访问 URL

例子:假设我们要访问伦敦的天气,先定义一个url:

NSString *londonWeatherUrl =
  @"http://api.openweathermap.org/data/2.5/weather?q=London,uk";

我们先用 NSURLConnection 的方式实现:

NSURLRequest *request = [NSURLRequest requestWithURL:
[NSURL URLWithString:londonWeatherUrl]];
 
[NSURLConnection sendAsynchronousRequest:request
   queue:[NSOperationQueue mainQueue]
   completionHandler:^(NSURLResponse *response,
                       NSData *data,
                       NSError *connectionError) {
      // handle response
}];

再用 NSURLSession实现:

NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:[NSURL URLWithString:londonWeatherUrl]
          completionHandler:^(NSData *data,
                              NSURLResponse *response,
                              NSError *error) {
            // handle response
 
  }] resume];

注意,我们是用了最简单、最快速的方法使用 NSURLSession。我们甚至没有指定queue,它会自动在后台执行下载任务。

另外,也可以使用AFNetworking来实现:

NSURLRequest *request = [NSURLRequest requestWithURL:
                         [NSURL URLWithString:londonWeatherUrl]];
 
AFJSONRequestOperation *operation =
[AFJSONRequestOperation JSONRequestOperationWithRequest:request
    success:^(NSURLRequest *request,
              NSHTTPURLResponse *response,
              id JSON) {
    // handle response
} failure:nil];
[operation start];

用 AFNetworking的好处是返回的数据直接是json格式的,省的自己再解析了。


参考文章:

1. apple官方:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165-BCICJDHA

2. 著名的 Tutorial 系列:

http://www.raywenderlich.com/51127/nsurlsession-tutorial

【AUTOSAR SystemServices】深入解析StbM模块:功能定义、工作原理与代码实现 STBM模块:AUTOSAR同步时基管理核心解析 STBM(同步时基管理器)是AUTOSAR标准中实现车载系统时间同步的关键模块,主要功能包括: 时间基准管理:支持全局时基、偏移时基和纯本地时基三种类型,通过StbM_SetGlobalTime和StbM_SetOffset实现主从节点同步。 校正机制:采用偏移校正和速率校正算法(PPM级精度)补偿时钟偏差,确保多ECU时间一致性。 事件处理:监控时间跳变和超时事件,通过回调机制通知上层应用。 典型应用:用于CAN/Ethernet总线同步、时间触发调度及诊 阅读详情

相关推荐

从零到一:使用阿里云百炼搭建企业级 AI Agent 完全实战手册(2026超详细版)

本文是一份企业级AI Agent构建手册,主要面向企业技术负责人、AI产品经理和后端开发工程师。手册详细介绍了如何在阿里云百炼平台上搭建企业智能体应用的全流程,包括环境准备、知识库构建、智能体创建、工具集成、工作流编排等核心环节。重点内容包括: 准备工作:阿里云账号注册、百炼服务开通、免费额度领取、API Key管理 知识库构建:文档格式要求、内容优化原则、RAG系统搭建 智能体开发:Agent创建、工具集成、复杂业务工作流设计 生产部署:多渠道接入、监控运维、安全治理 成本控制:Token预算管理、选型决

u010323587的专栏 1085

iOS URL Loading System 简介

1 总览 URL Loading System 提供获取资源的能力通过URLs,使用标准https协议或者是开发者自定义的协议。使用标准Internet协议与URL交互并与服务器通信。且加载执行的过程是异步的,保证了应用界面响应与处理加载数据的同时执行。 您可以使用一个URLSession实例来创建一个或多个URLSessionTask实例,这些实例可以将数据从网络获取并返回到您的应用,下载文件或将数据和文件上传到远程位置。要配置会话,请使用 URLSessionConfiguration对象控制Task的

MuscariBotryoides 的博客 530

Cadence DSP 算子开发实战:从入门到精通

本文详细介绍了Cadence DSP算子开发的实战技巧,从入门基础到高级优化。内容涵盖DSP架构特性、内存管理、分块计算策略、SIMD指令优化等核心知识,并提供了性能调优和调试的实用技巧,帮助开发者快速掌握Cadence DSP开发精髓,提升图像处理等计算密集型任务的开发效率。

weixin_29278805的博客 434

URL Loading System 概览

URL Loading System 是一系列用来访问通过 URL 来定位的资源的类和协议。这项技术的核心在于基于 NSURL 这个类来访问资源,除了加载 URL 的类 NSURLSession 之外,我们把其他相关辅助类分为 5 类(如图所示): 协议支持(protocol support) 认证和证书(authentication and credentials) cookie 存储(coo...

weixin_34204057的博客 283

ESP32S3 Korvo2V3四通道AEC配置实战:基于AFE的回声消除优化

本文详细介绍了在ESP32S3 Korvo2V3平台上配置四通道AEC(回声消除)的实战经验。通过AFE算法优化和硬件连接调试,实现高质量回声消除,显著提升智能音箱和会议设备的语音交互体验。重点解析了四通道配置、数据格式对齐和参数调优等关键技术要点。

elastic6hunter的博客 932

NXP应用随记(八):S32K3XX的HSE学习记录(HSE\MU\UTEST\IVT\A,B SWAP)

HSE,即硬件安全引擎(Hardware Security Engine),是NXP S32K312微控制器(MCU)中的一个功能,它提供了一系列的安全特性,包括加密、安全启动和密钥存储等。这些功能旨在增强汽车电子系统的信息安全,符合ISO26262标准,达到ASIL D安全等级。具体来说,S32K312的HSE支持AES-128/192/256加密、RSA、ECC等加密算法,以及侧通道保护,确保了数据传输和存储的安全性。

梦想技术家 9744

IOS 同步异步请求JSON数据

IOS SDK为HTTP请求提供了同步和异步两种请求这种不同的API,而且可以使用Get或POST等请求方法。1.同步Get请求在贴代码之前先对项目有个整体的说明:如图所示 首先新建Master-Detail Application类型项目,我们可以看到会自动帮我们新建一些类,然后通过手动添加NSString_URLEncoding.h和NSNumber+Message.h类库主要用于对URL

wuruiaoxue的专栏 2570

RICHARDSON-LUCY 去卷积简介

Lucy去卷积1.泊松过程及联合概率分布2.极大似然估计参考文献 1.泊松过程及联合概率分布 首先假设相机接收光子生成图像的过程符合泊松分布。 因此,一次曝光过程中,某像素位置接收到iii个光子的概率p(i)p(i)p(i)为: p(i)=exp⁡(−λ)⋅λii!\qquad\qquad p(i)=\exp(-\lambda)\cdot\cfrac{\lambda^{i}}{i!}p(i)=exp(−λ)⋅i!λi​ 那么针对一张M∗NM*NM∗N的图像,所有像素的联合概率分布可以描述为: P(I)=∏e

驽马十驾,功在不舍;锲而不舍,金石可镂。 8694

URL Loading System Programming Guide-使用NSURLSession

使用NSURLSessionNSURLSession及其相关的类提供了通过HTTP来下载内容的API。这些API提供了丰富的代理方法来支持授权,以及在app没有运行,或者在iOS中,app被挂起时,来执行后台下载。 使用NSURLSession API,需要创建一系列的session,每个session协调一组相关的数据传送任务。例如,如果你正在写一个浏览器,你可能会为灭个tab或者window创

了凡 1438

DO-297标准详解:IMA系统开发与认证指南

DO-297的前言部分为读者提供了本指南的概述,说明了该标准的编写背景、主要目标、目标受众以及该文件在开发和认证集成模块化航空电子(IMA,Integrated Modular Avionics)系统中的作用。作为现代航空电子架构的重要组成部分,IMA系统大幅度简化了航空电子系统的硬件配置,增加了灵活性并降低了成本。因此,DO-297成为确保IMA系统开发、集成和认证符合适航标准的核心文件。在现代航空领域,系统复杂性逐渐增加,传统上各子系统独立运行的方式已经不适应多任务、多功能的需求。

qq_41854911的博客 1583

人工智能在软件测试中的广泛应用领域

人工智能在软件测试中的应用领域涵盖了自动化测试、缺陷预测和缺陷检测、智能化测试报告生成等方面。以上提供的示例代码只是其中的一小部分,实际上,人工智能在软件测试中还有许多其他的应用。通过结合人工智能和软件测试,可以提高测试效率和质量,减少测试工作的人力成本,并帮助开发人员更好地理解和改进软件产品。人工智能(Artificial Intelligence,简称AI)在软件测试领域的应用越来越广泛。下面将介绍几个人工智能在软件测试中的主要应用领域,并提供一些相关的源代码示例。

FycPerformance的博客 462

iOS网络请求架构图URL Loading System

转载说明 原文链接 URL Loading System 概览 说明 URL Loading System 是一系列用来访问通过 URL 来定位的资源的类和协议。这项技术的核心在于基于 NSURL 这个类来访问资源,除了加载 URL 的类 NSURLSession 之外,我们把其他相关辅助类分为 5 类(如图所示): 协议支持(protocol support) 认证和证书(authentica...

AI架构师易筋 641

Lumerical 教程目录,说明及个人感悟(共计138篇,持续更新中)

Lumerical---教程说明及个人感悟

u011699626的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

推荐一款创新的iOS网络调试利器:MMBarricade

推荐一款创新的iOS网络调试利器:MMBarricade MMBarricade是一个专为iOS开发者设计的强大工具,它提供了一种运行时可配置的本地服务器框架,通过拦截并重定向网络请求来实现灵活的测试和调试。这款开源库利用了Apple的URL Loading System,支持诸如NSURLSession、NSURLConnection以及基于其构建的第三方库如AFNetworking等。 项目介...

gitblog_00015的博客 987

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Alamofire协议支持:HTTP/HTTPS/FTP等协议

在iOS/macOS应用开发中,网络请求是必不可少的功能。开发者经常面临这样的困境:需要支持多种网络协议(HTTP、HTTPS、FTP等),但苹果原生的URLSession API相对底层,使用起来不够便捷。手动处理各种协议的细节、认证、重试机制等会消耗大量开发时间,而且容易出错。 Alamofire作为Swift语言的明星网络库,完美解决了这一痛点。它基于Apple的URL Loading S...

gitblog_00321的博客 861

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

iOS架构设计-URL缓存(上)

转载自崔江涛(KenshinCui) http://www.cnblogs.com/kenshincui/p/iOS-jia-gou-she-jiURL-huan-cun.html 概览 缓存组件应该说是每个客户端程序必备的核心组件,试想对于每个界面的访问都必须重新请求势必降低用户体验。但是如何处理客户端缓存貌似并没有统一的解决方案,多数开发者选择

cleven 435

iOS缓存

概览 缓存组件应该说是每个客户端程序必备的核心组件,试想对于每个界面的访问都必须重新请求势必降低用户体验。但是如何处理客户端缓存貌似并没有统一的解决方案,多数开发者选择自行创建数据库直接将服务器端请求的JSON(或Model)缓存起来,下次请求则查询数据库检查缓存是否存在;另外还有些开发者会选择以归档文件的方式保存缓存数据,每次请求资源之前检查相应的缓存文件。事实上iOS系统自身

YCM1101743158的博客 604

iOS:NSURLProtocol搭建网络请求监控系统

文章目录这篇文章介绍了些什么?一、什么是NSURLProtocol?1.[URL Loading System](https://developer.apple.com/documentation/foundation/url_loading_system?language=objc)2.[NSURLProtocol官方文档](https://developer.apple.com/documen...

weixin_43884484的博客 683

iOS | AFNetworking封装

为大家分享一个IOS处理网络请求,网络上传,网络下载等功能全面的一个第三方框架-AFNetworking,这是一个使用非常方便的网络框架. 最新的版本是基于NSURLSession,原来的NSURLConnectionOperation在此已经移除. git链接请点击此处 简介 AFNetworking is a delightful networking library for iO...

diansuan5209的博客 181

AdBlockByIOS 的安装和配置教程

AdBlockByIOS 的安装和配置教程 1. 项目的基础介绍和主要的编程语言 AdBlockByIOS 是一个用于iOS系统的开源广告拦截项目。它能够帮助用户过滤掉不需要的广告,提升用户体验。该项目主要使用 Swift 编程语言开发,适用于iOS平台。 2. 项目使用的关键技术和框架 AdBlockByIOS 使用了以下几个关键技术: URL Loading System:用于网络请求的处理...

gitblog_01199的博客 1042

AFN官网翻译

https://github.com/AFNetworking/AFNetworking 合并拉要求 #2474 从fggeraissate /主 ... 最新提交4241ddeee3  mattt 撰写10 hours ago   AFNetworking.xcworkspace 重命

wuxiaohui103的专栏 956

真机调试差异揭秘:为什么onHeadersReceived在iOS和安卓表现不同?

本文深入分析了小程序开发中`wx.request`的`onHeadersReceived`事件在iOS和安卓平台上的表现差异,特别是处理302重定向时的不同行为。通过对比平台实现机制,提供了包括H5桥接、服务端代理和平台特定代码在内的多种解决方案,帮助开发者实现跨平台兼容性。

weixin_29324877的博客 225

[翻译] AFNetworking 2.0

大名鼎鼎的开源网络库AFNetworking 2.0,目前只是翻译了Github上的链接文章,使用教程请点击 http://www.cnblogs.com/YouXianMing/p/3651462.html https://github.com/AFNetworking/AFNetworking AFNetworking is a delightful netwo...

weixin_30618985的博客 60

AFNetworking

AFNetworking network framework

iOS weidao菜鸟的专栏 574
上一篇: iOS - Concurrency Programming Guide (iOS并行编程指南)
下一篇: git实用命令集锦
object_c_key
博客等级 码龄11年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值