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 来增加。
希望能制作自己的一个库,存放常用的代码。
- 7月小结
- 7月小结
- 7月小结
- 7月小结
- 7月31日小结
- 8月7日小结
- 9月1-10月7日阶段小结
- 两个月小结(7中旬 ~ 9中旬 )
- 7月12号面试小结
- 7月13号面试小结
- 工作一个月小结
- 20103月小结
- 4月小结
- 4月读书小结
- 5月读书小结
- 9~10月小结
- 4月小结
- 一个月的小结
- DOM,SAX,JDOM,DOM4J四种xml文件解析方式小结
- synchronized 关键字的理解
- underscore.js 剩余属性1-- template
- Python 调试
- 比较两个字符串的最长公共子序列的长度,字符不区分大小写
- 7月小结
- 题目1166:迭代求立方根
- MySQL索引背后的数据结构及算法原理
- HDU 1718 Rank
- [leetcode]133. Clone Graph
- 微信小程序开发——1.环境搭建
- 统计一个数字在排序数组中出现的次数。
- HDU 6047 Maximum Sequence
- Sky 数