从事iOS开发两年时间了,从最初只关心功能,到每次拿到设计原型,都要坐在一起讨论每个细节的设计。
比如:这个模块使用什么方式实现比较合适,这个参数是不是必须的,功能和展示必须要分开(进度条和上传进度计算),固定的模块是不是可以抽出来作为独立的tagret,目标是尽可能让每个模块都能稳定,并在以后的每次快速迭代中,高效,可用,稳定。
其实仔细坐下来想想,你会发现自己当时拍一拍脑子觉得这很简单啊,不就是实现一个功能嘛。其实不然,要让自己负责的模块完美的供团队使用,要考虑的情况其实还是很多的。
给大家看一下目前项目的结构示意图:
之前七牛批量图片上传使用的是通知方式,因为很多时候,不管是网络请求还是图片转化,为了不影响主线程,一般都是采用异步线程去处理,所以不可能实时得到转化的结果,那么怎么做呢?其实有三种做法:
@1 通知 Notification ,收到返回结果发送通知,进行后续操作。
@2 信号量 因为是异步的,所以通过发送信号量的方式,在收到信号之后做后续操作。
@3 block block闭包的性质,让我们可以舒服的时候其他类中的成员变量。
最后经过再三决定还是使用block方式,主要原因还是在封装的完善上考量的。使用前两种当然可以实现,但是封装性太差。使用block,我们可以让block作为函数参数使用,获取内部封装的进度,返回结果等信息。
每种技术的选择,都是有着意义的,我们在选择某种实现方式的时候,其实应该更多的考量它对今后每个模块的影响,而不仅仅是当下。