MelonTeam 移动终端前沿技术的探索者

开发中容易忽略和挖坑的场景总结

2017-05-27
lilinli
ios

导语 总结代码设计时容易忽略的场景,需求启动阶段就考虑好各个场景,可以提高代码的健壮性,有效减少bug数

Model

设计协议时,没有考虑数据无更新的场景,不考虑seq存在的必要性
写发送请求代码时,没有考虑频率限制,重入问题
对于高频场景,没有考虑做数据缓存
对于列表数据没有去重逻辑
即发即看的数据(比如帖子,视频),要考虑好假数据的key问题,以及回包后刷新这个临时key的逻辑
忘了考虑超时,重试,网络切换,切后台/前台等等场景
往枚举类型中间插入新值时,要考虑旧版本的数据兼容性
数据量大时,没有考虑分页拉取
数据异步返回时,没有考虑账号已经切换的场景

View

动不动就reload整个tableview
把数据请求代码写到view里面
    这里不是不可以,而是不好,因为view的生命周期系统提供相应的回调,所以很多同学都把数据请求写到view的init方法里,这不仅仅引起代码耦合问题,一些性能问题也难以规避
    没考虑点击的频率限制
动画只会简单实用UIView提供的接口,一些序列动画请直接使用coreAnimatino接口
尽量不要在一个动画的completion里启动另外一个动画。为什么?
    动画一旦启动,无法直接中断。一些放大动画会先记录原来的值,等动画结束再还原回来,这个值很可能在其他地方被修改,导致还原回去的是个错误的值。
随处可见的魔法数字
随处可见的重复布局代码

Controller

动不动就继承系统的VC
    请多组合,少继承
willAppear/didAppear 一定要考虑重入问题
如果一个函数能改成静态的,说明这个函数与VC无关,请放到VC外面去,即使只有一行代码

上报

尽量把上报放到功能实现类的外面

性能

tableview里设置了Cornerradio,boundtomask等属性,生成圆角图片
tableview上的label使用sizetofit方法
这方法有严重的性能问题,请异步使用coretext里的接口来计算size,以免阻塞主线程
上传队列里如果有很多的UIImage,请考虑先存到本地,到真正上传时再从io读进来
上传队列每个task都应嵌套在autoreleasepool中

说一说

目录