第一章 更轻量的 ViewControllers

一、更轻量的ViewControllers 

1、把Data Source和其他的Protocol分离出来

比如说UITableView初始化的Data Source可以分离到ArrayDataSource。不过个人认为这种处理方式会无形中多出较多的文件,每个TableView都需要初始化数据,如果说把他们集成在一个文件里面通过table类型处理的话,又可能代码阅读和调试障碍。

在demo中并没有提及和实现数据变化后tableView的刷新问题,这也是一个障碍。

所以我个人不倾向这种处理,考虑下次开发时处理下,在建立文件目录使用MVVM的架构时,每个ViewController对应一个ArrayDataSource结构倒是清晰,需要文件过多的问题。

2、把业务逻辑移植到Model中处理

这里是指的对Model中的数据做一些逻辑处理,比如说日期格式,这一点还是很赞成的,特别的是指处使用Category的形式实现逻辑处理的方法。

因为在大多数时候,我们想提取的方法又可能是会重复在其他的Model中也需要的,这样就可以省去重复代码。

3、创建 Store 类

这里我个人的理解,Store还是有一定必要的,并且像这样读取并处理数据的功能,在大部分App中是真实存在的需求。它其实还是很像一个Model,只是这个Model自己实现了requestData的功能,在当前流行的几种App架构设计中,是有使用Model自获取数据的先例的;即使不是自获取,也会新建一个功能类去获取数据,都是为了减少在ViewController中添加这些代码。

4、把网络请求逻辑移到 Model 层

对于将网络请求的基本实现从ViewController中剥离这一点,我很赞同,这也是当前的主流思想。具体的实现方式,其实放在Model中是一个很好的选择。

可以使得代码的阅读更加简明,因为需要用到Model的时候,就能看到数据的获取,可以极大的简化ViewController的代码量。

5、把 View 代码移到 View 层

当我们需要实现一个复杂的View,比如说顶部滚动的banner,我们只需要在ViewController中初始化就能直接使用,这是一件很美妙的事,其实UITableView就是最好的例子。

二、整洁的TableView代码

1、UITableViewController vs. UIViewController、Table View Controllers 的特性、Table View Controllers 的限制

我把这三个放在一起是有原因的,我们可以分析一下,工程师在开发中发现App中有大量的Table需求为了简化这些实现就有了UITableView,由于iOS开发的界面基础就是ViewController,就有了UITableViewController。

可以说它的形成原因决定了它的特性和限制,只为Table而生。

2、使用 Child View Controllers

当我们的界面有Table也有其他的控件,并且Table的样式丰富、功能复杂,更有甚者它其实是一个独立的功能界面,被引用到这个ViewController了。

有了这些需求就有了addChildViewController这个方法,唐巧大大的博文中有这段话说明了问题:

苹果新的 API 增加了 addChildViewController 方法,并且希望我们在使用 addSubview 时,同时调用 [self addChildViewController:child] 方法将 sub view 对应的 viewController 也加到当前 ViewController 的管理中。对于那些当前暂时不需要显示的 subview,只通过 addChildViewController 把 subViewController 加进去。需要显示时再调用 transitionFromViewController:toViewController:duration:options:animations:completion 方法。

另外,当收到系统的 Memory Warning 的时候,系统也会自动把当前没有显示的 subview unload 掉,以节省内存。

3、搭建 Model 对象和 Cells 之间的桥梁

这里我理解的就是ViewModel的概念了,建立Cell Category确实是一个在一般情况下非常好的选择。这种处理方式可以使得Cell非常容易的处理多种Model数据,并且代码的耦合处理的很好。

我个人认为在App开发的时候,项目没有严格按照MVVM的形式搭建的情况下,使用这种Category的方式,十分可行。

4、让 Cells 可复用

和上条一样,即实现Category的时候,多种不同的Protocol可以用来处理不同的Model,实现了复用。

5、在 Cell 内部控制 Cell 的状态

其实就是Cell自行处理内部逻辑实现,外部最多只通过一个变量的设置、或一个方法入口调用。例如设置Cell高亮时的Cell其他控件状态,外部可以通过设置Highlight属性,完成内部设置。

6、控制多个 Cell 类型

一个TableView中多种Cell类型的处理,比较常见,就是在CellForRowAtIndexPath中根据数据源或者IndexPath来区分加载,分离的方法一般就是一个Cell一个方法调用。

7、编辑 Table View

其实说的就是在使用Model的情况下,ViewController只是负责实现编辑TableVIew的UI操作,得到反馈后通知Model去对数据进行增删改排序操作。

三、View Controller 容器

感觉就是讲述addChildViewController和普通的单纯执行addSubView的区别,前者是一套完整的ViewController处理逻辑,后者只是一个View。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容