AFNetworking源码解读

本文主要介绍了AFNetworking的源码解读,包括dispatch_barrier_async在并发队列中的应用,AFN的下载图片限制,以及对NSURLSession和NSOperationQueue的封装。同时,详细讲解了NSURLConnection的工作原理,如请求缓存策略、超时时间设置、可变请求的创建和响应信息。此外,还对比了GET和POST请求的区别,以及AFNetworking的文件上传和缓存机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.dispatch_barrier_async函数的使用(栅栏函数)

dispatch_barrier_async函数在进程管理中起到一个栅栏的作用,它等待所有位于barrier函数之前的操作执行完毕后执行,并且在barrier函数执行之后,barrier函数之后的操作才会得到执行,该函数需要同dispatch_queue_create函数生成的concurrent Dispatch Queue队列一起使用

作用:

(1)实现高效率的数据库访问和文件访问

(2)避免数据竞争

2.FIFO和LIFO

    FIFO:先进先出(堆;队列)

    LIFO:先进后出(栈)

堆和栈是两种不同的操作系统

3.AFN下载图片的最大量是4(maximumActiveDownloads = 4)

4.AFN是对NSURLSession和NSOperationQueue的封装

5.NSURLConnection

   简介:NSURLConnection是iOS 2.0推出,用法简单,最古老最经典最直接的一种方案,在iOS 9被苹果废弃

    (1)NSURLConnection发送网络请求

            1.设置url NSURL:确定要访问的资源

            2.创建请求 NSURLRequest:根据URL建立请求,向服务器索要数据

            3.发送请求 NSURLConnection:建立网络连接,将请求发送给服务器

            4.数据处理  response,data,error处理

    (2)NSURLConnection请求缓存策略和超时时长

        typedefNS_ENUM(NSUInteger, NSURLRequestCachePolicy)

{

    NSURLRequestUseProtocolCachePolicy = 0, //使用HTTP协议的默认缓存

    NSURLRequestReloadIgnoringLocalCacheData = 1, //忽略本地缓存,只加载“最新”网络数据 (股票)

    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented 

    NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,

    NSURLRequestReturnCacheDataElseLoad = 2, //优先加载缓存数据,如果没有缓存数据就加载最新的数据

    NSURLRequestReturnCacheDataDontLoad = 3, //只加载本地缓存数据 (离线APP / 离线地图)

    NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented

};

     (3)可变请求NSMutableURLRequest

      NSMutableURLRequest*mutableUrlRequest = [[NSMutableURLRequestalloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:60];

    //设置请求方法

    [mutableUrlRequest setHTTPMethod:@"GET"];

    [mutableUrlRequest setHTTPMethod:@"POST"];

    [mutableUrlRequest setHTTPMethod:@"PUT"];

    [mutableUrlRequest setHTTPMethod:@"HEAD"];

    [mutableUrlRequest setHTTPMethod:@"DELETE”];

 

     NSString*body = [NSStringstringWithFormat:@"name=%@&age=%@",@"joson",@"25"];

    //设置请求体

    [mutableUrlRequest setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];

    //设置请求头

    [mutableUrlRequest setValue:@"iphone AppleWebKit"forHTTPHeaderField:@"User-Agent”];

 

        (4)NSURLConnection响应

    URL:服务器反馈的URL,有的时候,服务器会重定向新的URL

    MIMEType:服务器告诉客户端,返回的二进制数据类型;ContentType;根据MIMEType客户端就知道使用什么软件处理返回的二进制数据;网络之所以这么丰富多彩,是因为有非常多的客户端软件

    statusCode:状态码:1xx:消息  2xx:成功 3xx:更多选择  4xx:客户端错误 5xx:服务器错误

    expectedContentLength:数据长度,下载文件的总长度

    suggestedFileName:建议的文件名

6.GET / POST请求对比

    GET:从服务器获取数据,效率比POST高;GET请求能够被缓存;在HTTP协议定义中,没有对GET请求的数据大小限制,不过因为浏览器不同一般限制在2-8k之间;GET发送请求时,URL中除了资源路径以外,所有的参数也包装在URL中,并且服务器的访问日志会记录,不要传递敏感信息;

                参数格式:在资源路径末尾添加?表示追加参数;每一个变量及值按照 变量名=变量值 方式设定,不能包含空格或者中文; 多个参数使用&连接;注意:URL字符串中如果包含空格或者中文,需要添加百分号转译

    POST:向服务器发送数据,也可以获得服务器处理之后的结果,效率不如GET;POST请求不能被缓存;POST提交数据比较大,大小靠服务器的设定值限制,PHP通常限定2M;POST发送请求时,URL中只有资源路径,但不包含参数,服务器日志不会记录参数,相对更安全

        

7.NSURLConnection文件上传-单个,多个,文本信息

    分为四种情况:单个文件上传不带文本信息;单个文件上传带文本信息;多个文件上传不带文本信息;多个文件上传带文本信息

 

8、关于AFNetWorking的缓存机制

AFNetWorking实际上使用了两个独立的缓存机制:AFImagecache和NSUrlCache

AFImagecache:一个提供图片内存缓存的类,继承自NSCache。

    AFImagecache是UIImageView+AFNetWorking分类的一部分。它继承自NSCache,通过一个URL字符串作为它的key(从NSURLRequest中获取)来存储UIImage对象。

NSURLCache:URL的缓存机制,用于存储NSURLResponse对象:一个默认缓存在内存,通过配置可以缓存到磁盘的类。

    NSURLCache的默认配置只是缓存在内存并没有写到硬盘。为了解决这个问题,可以声明一个sharedCache,写入磁盘。

iOS对NSURLRequest提供了7种缓存策略:实际上能用的只有4种。

9、AFN的安全策略总共有3种:无检测、公钥检测、公钥和证书双检测

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值