zoukankan      html  css  js  c++  java
  • ViewController 优化

    解决问题:部分复杂页面的Controller过于庞大,不利于维护与复用;

    复杂的页面大多是基于tableview的页面。复杂页面的代码大致可分为两部分(复杂的View布局用Nib实现的话,一般大家都是这么做),一部分是响应逻辑,一部分是页面显示逻辑;

    对于基于tableview的页面,响应逻辑即每个Cell中对应的响应逻辑,一般我们是通过Cell的Delegate在Controller中实现,显示逻辑即UITableViewDataSource。

    一、响应逻辑简化:

    1.将部分单独模块逻辑抽离Controller,使用ChildViewController;

    优点:简化了Controller的逻辑,与ViewController使用方法保持一致;

    缺点:当整个使用ChildViewController嵌套tableView时作为Cell的内容时,由于复用的单位是整个使用ChildViewController,影响性能,尤其是当使用ChildViewController中的cell过多时会卡顿;

    2.以Cell为单位将逻辑放在Cell中,将Cell做为Controller;

    优点:类似于使用ChildViewController,简化了Controller的逻辑;大部分使用tableview的页面使用时不用考虑Cell的组装,可直接使用;使用WCCTableviewDynamicCellDelegate,抽象调用,弹性好;

    缺点:当同使用ChildViewController;

    例:CSPromotionStoreAddressCell

    3.MVVM + ReactiveCocoa,采用视图模型;

    二、显示逻辑简化:

    1.Cell实现自己的显示逻辑,根据Model刷新;

    优点:Cell的显示与Controller解耦;逻辑清晰;

    例:CSPromotionStoreAddressCell

    2.单独实现dataSourcedelegate的Manager;

    优点:将tableView的数据逻辑与Controller解耦,TableView所在的Controller不再管理tableView的显示

    缺点:指定Cell的delegate时需要Manager获取到Controller,需要避免循环引用;

    例:CSPromotionStoreDetailViewControllerCSPromotionStoreDetailCellManager

    对于非基于tableview的页面,使用ChildViewController或酌情使用基于Cell的Controller方式。

  • 相关阅读:
    【线段树 树链剖分 差分 经典技巧】loj#3046. 「ZJOI2019」语言【未完】
    【图论 思维】cf715B. Complete The Graph加强
    【A* 网络流】codechef Chef and Cut
    【主席树上二分】bzoj5361: [Lydsy1805月赛]对称数
    蓝书例题之UVa 10253 Series-Parallel Networks
    HAOI2019+十二省联考 游记
    Beyas定理
    CF739E Gosha is hunting DP+wqs二分
    wqs二分
    线性规划之单纯形算法
  • 原文地址:https://www.cnblogs.com/dokaygang128/p/3899251.html
Copyright © 2011-2022 走看看