重构步骤笔记
重构的目的
- 相同的代码不要出现两次
- 相同功能的代码可以及时抽取,以备日后复用,不要
重复创建轮子
重构的原则
- 明确
每一步的目标
- 小步走
- 测试(每一个改动都有可能出现错误)
抽取代码的步骤
- 新建方法
- 复制代码
- 根据代码调整参数和返回值
- 调整调用位置代码
- 测试
抽取类的步骤
- 示意图
抽取主方法
- 新建类
- 抽取主方法
- 在
.h
中定义方法接口,明确该方法是否适合被外部调用 - 在
.m
中增加方法实现
- 在
- 将主方法复制到新方法中
- 复制相关的
子
方法 - 复制相关属性
- 检查代码的
有效性
- 调整内部变量,让
NSURL
由调用方传递,保证代码的灵活性
- 调整内部变量,让
- 复制代理方法,
- 注释更新
UI
部分的代码 - 使用
#warning TODO
提醒自己此处有未完成的工作 - 这样做可以不影响重构的节奏
- 注释更新
- 调整视图控制器
测试
重构方法执行 - 调整视图控制器代码,删除被移走代码
- 再次测试,确保调整没有失误!
确认接口
- 确认重构的接口
- 需要
进度
回调 - 需要
完成&错误
回调
- 需要
- 定义类方法,传递回调参数
- 实现类方法,记录住回调 block
- 调整调用方法
- 增加
block
实现 - 测试
- 增加已经下载完成的回调
- 进度回调(100%)
- 完成回调(路径)
- 断言
- 暂停操作
- 测试,测试,测试!
新问题:如果连续点击,会重复下载,造成错乱!
解决办法:建立一个下载管理器的单例,负责所有的文件下载,以及下载操作的缓存!
- 示意图
抽取下载管理器
- 建立单例
接管
下载操作- 定义接口方法
- 实现方法
- 替换方法
- 测试
- 操作缓存
- 暂停实现
- 最大并发数,
NSOperationQueue+NSOperation
block 小结
- block 是
C
语言的数据结构 - 是预先准备好的代码,在需要时执行,类似于匿名函数指针
- 可以被当作参数传递
- 在需要时,可以对
block
进行扩展 - 如果当前方法不执行
block
,需要使用属性
记录 block
属性需要使用copy
描述符- 对于必须传递的
block
回调,可以使用断言