实例:应用列表(网络获取图片)
1. 创建tableViewController
2. 导入app的plist
3. 导入app的Model(保存模版文件)
4. 在控制器写apps的懒加载(添加代码快)
5. 设置列表的行数
6. 创建cell(添加代码快)
7. 给cell中的detailTitle和title赋值
8. 开辟子线程设置imageView
8.1直接设置的弊端
1. 阻塞主线程,造成UI操作无响应
2. 重复下载,浪费资源,浪费流量
8.2懒加载创建队列
创建操作对象,下载图片
问题:下载失败后不能重新下载
解决:创建存储操作和url的字典,创建一一对应关系
问题:重复下载
解决:判断是否成功下载过,判断字典中是否已存在下载操作operation
问题:初始化cell时没有设置imageview的尺寸而无法显示,或者cell重用时显示的是缓存cell的内容,误导用户
解决:使用占位图
问题:图片还没有下载完成,其所在的cell就被重用,要是当前要设置的图片下载比较快,先前下载的图片就会在后面覆盖当前的图片,imageView图片设置顺序:占为图->当前图片->先前图片
解决:不直接设置imageView.image,而是刷新表格,通过字典中的内容设置
问题:刷新怎个表格浪费内存资源
解决:单行刷新
问题:图片下载太多容易引发内存警报
解决:1. 释放字典,
2. 开始拖拽暂停队列,结束拖拽恢复队列
问题:xxViewController、queue、operation之间循环引用
解决:使用viewController的弱指针对象
或
问题:字典的key不能是nil,图片下载失败返回空时,程序会崩溃
解决:
######使用沙盒 #############################################
UIImage -> NSData -> File
Caches不会备份,也不会自动清理,用于存放占内存的资源
手机端必须使用全路径
存储图片缓存到沙盒中
取出沙盒中的图片
》封装下载流程,控制器只需调用即可
1 创建下载图片的代理方法
2 创建代理
3 创建url和indexpath属性
4 控制器设置url和indexPath
5 设置控制器为代理
6 实现代理方法
7 获取Image
》耗时操作可能被中途取消,需要把代理方法终止,响应取消操作
SDWebImage框架(掌握)
缓存管理
默认最大缓存时间:一周
默认最大缓存容量:没有设置
网络编程概览
》HTTP请求方案
苹果原生
NSURLConnection
NSURLLession
CFNetwork
第三方框架
ASIHTTPRequest
AFNetworking
MKNetworkKit
扩展知识点
1.
2. block中用到的对象都会被强引用,因为block代码不确定什么时候被调用
3.
4. XXAppDelegate负责监控整个项目