首页 > 代码库 > MJ - 0918 - 网络编程1

MJ - 0918 - 网络编程1

实例:应用列表(网络获取图片)


 

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

MKNetworkKit

 

 

 

扩展知识点


1. 

2. block中用到的对象都会被强引用,因为block代码不确定什么时候被调用

3. 

4. XXAppDelegate负责监控整个项目

 

MJ - 0918 - 网络编程1