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种:无检测、公钥检测、公钥和证书双检测