博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSURL
阅读量:6466 次
发布时间:2019-06-23

本文共 2010 字,大约阅读时间需要 6 分钟。

 
让我们先看一下URL的结构:
protocol://username:hostname:port/pathname[?query][#fragment]
查询与pathname之间用 ?分隔,参数间使用&分隔
例如:
http://root:Password1@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose
 
构建NSURL:
NSURL *baseURL = [NSURL URLWithString:@"file:///path/to/web_root/"];
NSURL *url = [NSURL URLWithString:@"folder/file.html" relativeToURL:baseURL];
NSURL *absURL = [url absoluteURL];
NSLog(@"absURL = %@", absURL);
 
NSURL *url = [[NSURL alloc]initWithScheme:@"http"
                                     host:@"www.baidu.com"

                                     path:@"/index.html”];

 

NSURL请求缓存:

当一个请求完成下载来自服务器的回应,一个缓存的回应将在本地保存。下一次同一个请求再发起时,本地保存的回应就会马上返回,不需要连接服务器。NSURLCache 会 自动 且 透明 地返回回应。

 

NSURLCache类:

NSURLCache为URL请求提供了内存中以及磁盘上的综合缓存机制。

任何通过NSURLConnection加载的请求都将被NSURLCache处理。

为了好好利用NSURLCache,你需要初始化并设置一个共享的URL缓存。

在didiFinishLaunchingWithOptions:中加入

NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024

     diskCapacity:20 * 1024 * 1024

diskPath:nil];

 

NSURLRequestCachePolicy

NSURLRequest有个cachePolicy属性,指定了请求的缓存行为。其值如下:

 NSURLRequestUseProtocolCachePolicy                 默认行为,使用网络协议中实现的缓存协议

ReloadIgnoringLocalCacheData           不使用缓存

ReturnCahcheDataElseLoad                 使用缓存(不管它是否过期),如果缓存中没有,则从网络加载

ReturnCacheDataDontLoad              离线模式:使用缓存(不管它是否过期),但是不从网络加载   

 

NSURLConnectionDelegate中

 - (NSCachedURLResponse *)connection:(NSURLConnection *)connection

                  willCacheResponse:(NSCachedURLResponse *)cachedResponse

{

    NSMutableDictionary *mutableUserInfo = [[cachedResponse userInfo] mutableCopy];

    NSMutableData *mutableData = [[cachedResponse data] mutableCopy];

    NSURLCacheStoragePolicy storagePolicy = NSURLCacheStorageAllowedInMemoryOnly;

 

    // ...

 

    return [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response]

                                                    data:mutableData

                                                userInfo:mutableUserInfo

                                           storagePolicy:storagePolicy];

}

 NSCachedURLResponse 是个包含 NSURLResponse 以及它对应的缓存中的 NSData 的类

如果 -connection:willCacheResponse: 返回 nil,回应将不会缓存。

如果不实现此方法,NSURLConnection 就简单地使用本来要传入 -connection:willCacheResponse: 的那个缓存对象,所以除非你需要改变一些值或者阻止缓存,否则这个代理方法不必实现。

 

 

 

 

转载于:https://www.cnblogs.com/LaiSong/p/4708016.html

你可能感兴趣的文章
一个人机交互模式的尝试
查看>>
Java8 利用Lambda处理List集合循环给另外一个List赋值过滤处理
查看>>
由浅入深剖析 go channel
查看>>
spring自定义类中@AutoWired标识的元素注入为null
查看>>
Bluetooth协议栈学习之SDP
查看>>
赞 ( 84 ) 微信好友 新浪微博 QQ空间 180 SSD故事会(14):怕TLC因为你不了解!【转】...
查看>>
prism behavior图示
查看>>
call/cc 总结 | Scheme
查看>>
教务处管理系统(线性链表)
查看>>
Windows防火墙的信任和阻止文件列表注册表
查看>>
java/android下JNI编程总结
查看>>
matlab练习程序(区域填充算法,队列版)
查看>>
Android消息队列模型——Thread,Handler,Looper,Massage Queue
查看>>
Ajax工作原理
查看>>
flex 实现图片播放 方案二 把临时3张图片预加载放入内存
查看>>
重置BizTalk RosettaNet
查看>>
StringCollection FAQ [C#, BCL]
查看>>
Java关键字static
查看>>
使用ODP.Net 可以实现.Net 程序以SYSDBA 身份访问数据库
查看>>
JavaEE连接池泄漏问题检测Oracle数据库
查看>>