7月小结

来源:互联网 发布:小盘科技股 知乎 编辑:程序博客网 时间:2024/06/03 08:04

七月是忙碌的一个月

这两周忙着切UI,也许别人看来无聊,但也是个好机会整理代码。在这个项目里呆的时间很长,看到一年前写的东西,很糟心。作为一个业务模块多的项目,从前很多问题没有考虑到位,随着上个月项目开始组件化,但写模块时的思路变得不同了。

下面说说我的变化:

  • 文件结构除了 MVC 之外可增加 NetWork Storage
  • 使用分类处理控制器中的业务
  • 业务组件和基础组件不要互相依赖 - cell的通用
  • block 的申明
  • 存储方面
    • 不要什么都存储在 NSUserDefault
    • 调用YYCache 最好不要使用类方法
    • 如果只考虑在 app 生命周期中读取数据可以使用单例
      • 可用业务登陆
  • 其他


文件结构除了 MVC 之外,可增加 NetWork , Storage

从前接收一个模块,一般文件夹中结构为 MVC,即:Controller, Model ,View 。现在增加两个: NetWork , Storage。
标准是:方便在将这个模块移动到另外一个app时,方便快捷拖拽即可,不用到处去找零散的代码。
公共类代码应该包含:网络请求的总方法、数据库、缓存的总方法、通用的cell。

使用分类处理控制器中的业务

要想代码清爽干净,分类必不可少。
不只是可以设置样式。还可以对模块的业务进行拓展。

比如,个人觉得应该针对delegate 中的不同功能,写分类。这样代码之间就不容易互相影响。比如可以写:
AppDelegate+JPushActions 专门存放激光接收时的方法
AppDelegate+JpushSettings 专门存放激光推送需要的设置方法
AppDelegate+Actions 存放delegate 中的相关方法,比如判断是否第一次登录、检测版本更新之类的。

推送来的时候,业务可能要求你跳转到摸个界面。要做得好,应该把跳转方法,写在自己业务模块的分类中。这样其他任意页面想跳转进来,就可以直接使用分类中的方法。

分类的坏处:
不能拥有成员变量,使用桥接可以,但是不建议。可以创建一个工具类来专门处理这些业务。
容易重复被覆盖,建议加前缀来解决。

业务组件和基础组件不要互相依赖 - cell的通用

写通用的cell时,应注意一种形态的cell写一个。cellA中 有两个按钮,或者位置和cellB 相差很远。写两个通用的cell更好。
组件化的原则之一是,业务组件和基础组件不要互相依赖。通用的cell 中不应该包含业务层面的东西。我从前的代码中就会出现 isFromCustomService(来自客服)、isFromFinance(来自财务) 这样的字眼。当时很方便快捷,但到后面非常难看,也难改。
如果只有这个业务是这个样式,不如单独写一个。

block 的申明

通用cell 写多了,每个cell都变得喜欢添加一个新的block 类型。其实没必要,而且容易造成block 重复覆盖。 block 其实就是一个方法类型。大致可以申明一下几种,放在一个头文件中,需要的时候调用即可:

#pragma mark - TextFieldtypedef void(^MSBlockTextFieldDidBeginEditing)(NSString *string);typedef void(^MSBlockTextFieldDidChange)(NSString *string);typedef void(^MSBlockTextFieldDidEndEditing)(NSString *string);#pragma mark - Selecttypedef void(^MSBlockBeginSelect)(void);typedef void(^MSBlockDidSelect)(NSString *string);#pragma mark - Buttontypedef void(^MSBlockButtonOnClick)(void);

存储方面

IO 操作是非常费时的。

不要什么都存储在 NSUserDefault

NSUserDefault 是一种 IO 操作。不要什么都用NSUserDefault 来存,否则当这个文件变大时,读取起来会很慢,各种卡顿,重则导致app 启动失败、闪退。当读取 NSUserDefault 失败时,系统可能会产生很多镜像文件。

调用YYCache 最好不要使用类方法

这样可能会存储、调取失败。

如果只考虑在 app 生命周期中读取数据,可以使用单例。

可用业务:登陆

项目中,有很多从 userDefault 中读取用户名、UUID 等信息的操作。个人觉得登陆后,一方面可以把个人信息存到 本地文件中(方便下一次启动 App 时读取 session 数据),另一方面,可以存到一个单例中。平时可以读取单例中的个人信息,读取不到再去读 IO 中的。账号被挤或者退出时,清空这两者中的数据。重新登录后,对两者进行赋值。

其他

写多了一个内部项目,简单的UI样式之后,开始对动画开始跃跃欲试。
这个月了解了 UITableViewCell 的加载动画。是在即将出现时,对cell增加动画,做的效果好的,可以根据indexPath 来增加。
希望能制作自己的一个库,存放常用的代码。

原创粉丝点击