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

学Simulink——基于Simulink的Buck-Boost变换器双闭环PI+抗饱和设计建模示例 本文详细介绍了基于Simulink的非反相Buck-Boost变换器双闭环控制设计方法。针对Buck-Boost变换器特有的右半平面零点(RHPZ)和控制挑战,提出了电压-电流双闭环PI控制架构,并集成抗积分饱和机制。通过Simulink建模,实现了主电路、电流内环PI、电压外环PI、PWM及占空比限幅等模块的搭建,验证了在输入电压跌落(20V→10V)和负载突变(2A→4A)等场景下的稳定性能。仿真结果表明,输出电压波动小于0.35V,恢复时间快于1ms,电感电流有效限幅。文章还讨论了工程实践要点和扩展方 阅读详情

相关推荐

AS5600磁编码器IIC通信与角度读取实战指南

本文提供了AS5600磁编码器通过IIC通信协议实现高精度角度读取的完整实战指南。详细解析了硬件连接要点、IIC通信时序、Arduino与STM32平台驱动代码,并分享了多圈测量、噪声滤波等进阶应用与避坑技巧,帮助开发者快速将这款非接触式角度传感器集成到电机控制、旋钮等项目中。

weixin_29172201的博客 242

iOS URL Loading System 简介

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

MuscariBotryoides 的博客 530

OsgEarth实战:飞机模型动态轨迹与雷达扫描效果实现详解

本文详细介绍了如何使用OsgEarth实现飞机模型动态轨迹与雷达扫描效果。通过实战案例,讲解了模型加载、路径规划、动态轨迹绘制、飞行姿态计算以及雷达扫描效果的实现方法,并提供了性能优化技巧,帮助开发者高效完成三维可视化项目开发。

weixin_29214199的博客 303

URL Loading System 概览

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

weixin_34204057的博客 283

想学嵌入式但没开发板?试试这个免费的STM32虚拟仿真平台(含LVGL界面教程)

本文介绍如何利用免费的STM32虚拟仿真平台学习嵌入式开发,特别适合预算有限或零硬件基础的学习者。通过详细的LVGL界面开发教程,展示虚拟仿真在嵌入式学习中的高效性和实用性,涵盖环境搭建、代码实现到实机迁移的全流程,助力快速掌握嵌入式开发核心技能。

weixin_29266647的博客 306

C#粘包和分包问题及解决方法

一:通过图解法来描述一下分包和粘包,这样客户更清晰直观的了解:  下面对上面的图进行解释:  1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。  2.粘包情况:Socket Client发送的数据包,在客户端发送和服务器接收的情况下都有可能发送,因为客户端发送的数据都是发送的一个缓冲...

weixin_42033401的博客 7767

IOS 同步异步请求JSON数据

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

wuruiaoxue的专栏 2570

车载 ECU 中的 Safety Linux 详解

车载 ECU 中的 Safety Linux 详解

天赐好车的博客 312

URL Loading System Programming Guide-使用NSURLSession

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

了凡 1438

AI agents在公司财务报表分析中的应用

在当今竞争激烈的商业环境中,公司财务报表分析对于企业的决策制定、风险评估、战略规划等方面起着至关重要的作用。传统的财务报表分析方法往往依赖于人工操作,存在效率低下、容易出错、难以处理海量数据等问题。而AI agents作为人工智能领域的重要成果,具有自动化、智能化、高效性等特点,能够为财务报表分析带来新的突破和变革。

SuperAGI2025 1609

基于simulink的BMS系统中电池单体故障隔离与恢复建模

本文介绍了使用Simulink构建BMS电池单体故障诊断与容错控制模型的方法。主要内容包括:1)搭建12串锂电池组模型;2)实现单体故障注入(过压、断线等);3)设计故障诊断与隔离模块(采用Stateflow状态机);4)开发恢复判断逻辑(需满足电压、温度等条件);5)系统监控与仿真设置。文章还提供了工程实践建议,如防环流设计、通信冗余等,并指出进阶方向(多故障处理、AI预警等)。该模型适用于新能源汽车、储能系统的BMS设计,可提高系统可靠性和安全性。

xiaoheshang_123的博客 140

iOS网络请求架构图URL Loading System

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

AI架构师易筋 641

滑块逆向及流程分析

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

pyzzd的博客 8007

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

gitblog_00015的博客 987

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

gitblog_00321的博客 861

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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、付费专栏及课程。

余额充值