TTModelViewController

TTModelViewController提供了一个机制来使View的展现与Model同步

TTModelViewController中设置了一系列标志位来存储Model与View的当前状态,通过UpdateViewState来更新View的内容

isModelXXXisInvalid的标记在相应操作生效后置1然后在调用回调后置0

isModelDidRefreshInvatrd  刷新后置1,执行完回调后置0
isModelWillLoadInvalid 在模型开始加载后置1
isModelDidLoadInvalid
isModelDidLoadFirstTimeInvalid
isModelDidShowFirstTimeInvalid
isViewInvalid
isViewSuspended 在ModelDidBeginUpdate和ModelDidEndUpdates中间为YES
isUpdatingView  updateView方法开始置1结束置0
isShowingEmpty
isShowingLoading
isShowingModel  己加载|!shouldLoad
isShowingError

私有方法:

resetViewStates:
判断几种视图的展示状态(加载中、展示模型、出错、空模型),如果开启则关闭.

updateViewStates
根据flag来更新视图的状态
在refresh中置isViewInvalid和isModelDidRefreshInvalid为NO

刷新的策略
从未加载过的Model使用内存+磁盘+网络缓存
加载过的Model使用网络缓存
判断为需要加载更多的使用内存+磁盘+网络缓存
其他的置isModelDidLoadInvalid为YES,如果View didAppear 则更新View([self updateView])

工作流程
在View加载前后设置 _isViewAppearing和_hasViewAppeared
viewWillAppear中在标记位设置后调用[self updateView]和父类viewWillAppear

– (void)updateView
在View无效的情况下如果View没有休眠也没有在更新中(isUpdatingView)则执行以下代码
设置isUpdatingView为YES
实例化Model
实例化View
[self updateViewStates]
如果当前控制器有冻结状态并且isShowingModel置YES则从_frozenState中恢复并结释放_frozenState
标记isViewInvalid和isUpdatingView为NO
[self reloadIfNeeded]

TTViewController会在viewWillAppear和viewDidAppear中暂停网络连接队列

发表评论

电子邮件地址不会被公开。 必填项已用*标注