(一) manager写法总结
按照数据的流向编号
1.继承自网络访问工具类
2.分页属性
【依据具体情况添加此项】
总页数,当前页码索引,总条数
3.数据存储容器(一般是结构体数组)
关于结构体,是一个独立文件,根据后台返回的字段列表进行编码,用json 进行初始化
4.回调通知
通知控制器数据获取完毕,成功或者失败,一般采用闭包
闭包书写比较麻烦,可以预先用typealias实现声明
5.网络访问方法(依据具体的场景增减函数)
调用网络工具类方法,具体看是否需要分页,数据成功取回以后,对数据存储对象进行元素填充,并通过闭包进行回调
(二) 控制器之间引用
在开发中经常会用到一个控制器去引用另外一个控制器的view,如下图,有个UIViewController
作为一个大容器,在每次滑动的时候需要加载一个新的UITableViewController
。需要注意的点,首先是将UITableViewController
的tableView添加UIViewController
的view。
后来发现数据不显示,只有一个空的tableView,说明UITableViewController
已经有了tableView
,后来代码进行了修改
分析:代码中的vc
属于一个临时变量,在方法执行完以后就销毁,但是由于addSubview
方法对tableView
持有,所以并未释放掉,但vc
已经销毁,数据不存在
解决方案:其实问题找到以后,解决方法就好说了,无非就是对vc
进行强引用,有两种解决方法
创建一个成员变量对vc 进行强引用,适用于单个控制
对于当前场景,多个控制器,可以采用addChildController的方式
(三)关于UITableViewController 的tableView 与 UIViewController 的view
在UITableViewController
有一个主要的UIView
,用于记录控制器内子控件,或者所有子控件的容器,但是在打印UITableViewController
view 和 tableView 发现二者内存地址一致,即在UITableViewController
中tableView即相当于UITableViewController
的view
的作用,在添加子控件addSubview的时候,既可以用view
也可以用tableView