最近实现一个需求从复杂到简单的过程

需求

之前要实现一个需求,大概是:

  • 数据源不定时地来向一个View写进数据。
  • View在有数据时需要按来到的顺序一个一个地做动画效果,然后把用完的数据丢掉

复杂点的解决过程

看完,脑子瞬间想到的,这不是一个典型的生产者-消费者模型吗。

然后想到接下来第一反应就是,一个队列 + NSCondition + NSOperation。

  • 一个线程不停的地读,没数据就挂起
  • 来数据就往队列里写,然后来的是第一条就唤醒线程
写一个队列

网上找来找去都没有看到Objective-C队列类,好,自己去实现一个。

  • 当年数据结构老师太严格,脑子就已经形成潜意识,写队列,就是写一个循环队列
  • 发现循环队列容量固定,满足不了需求,于是就写了一个可以扩容的的循环队列
  • 当容量扩得太大,而数据量不多的时候,是不是就需要减容了?????!
写实现逻辑
  • 队列 + NSCondition + NSOperation
实现之后

自测的时候,想了很多条件和预期结果,怕测试漏了给同事解释一遍逻辑让他帮忙想想

同事给了一句话,好像有点复杂,越简单越好,出错容易定位问题。

简单点的解决过程

回家后脑子里面一直想着这个问题。有时候一个想法扎进去了其实挺可怕的,后面缓了一下想到的简单方法:

简单队列
  • 定义:NSMutableArray *queue;//可以自动扩容哦

  • 入队:[self.queue addObject:obj];

  • 出队:if (self.queue.count) {[self.queue removeObjectAtIndex:0];}

  • 队头:self.queue.firstObject;
实现逻辑
  • 动画并不阻塞主线程
  • View一次动画完了,递归地去取数据,出队列,据再进行动画。没数据就停了。
  • 来数据时,数据加入队列,当View动画没有在执行的时候,让View去执行那个递归取数据的动画

并没有用到多线程,并不需要自己写队列。

一个简单的需求感觉好像做得点复杂了,当时我就懵逼了

总结

1.做之前尽量多想一下。

2.尽量往简单的方面去想,实现思路越简单,出错越容易定位。

3.当思路已经扎进去了,觉得有点复杂了,想下第2点,或许会有更简单的方法。

4.多了一个能自动扩容,不能减容的队列类,循环队列思路,有兴趣的拿去玩玩