人生有两大悲哀:一:愿望没有实现,二:愿望实现了。
--------王尔德
今天说说倒计时功能。
因为现在的项目用到了倒计时,在实现的时候遇到了不少问题,其中涉及的知识挺重要的,就写一下吧。
新建一个项目来模拟当时遇到的问题。
前面的步骤就不多说了,直接上关键的代码。
给视图控制器加上需要的属性,一个滚动视图,一个count,一个label和计时器。
@interfaceViewController()
@property(strong,nonatomic)UIScrollView *scrollView;
@property(assign,nonatomic)NSInteger count;
@property(strong,nonatomic)UILabel *label;
@property(strong,nonatomic)NSTimer *timer;
@end
然后把count赋值100,初始化滚动视图,label,定时器。
开始运行。
完美!!定时器跑起来了。
但是,当我们滚动视图的时候,会发生什么呢?
如你所见,定时器不动了!!!!
这是怎么回事??镇定镇定,优秀的程序员不能这样毛毛跳跳。
我们先来看看解决办法。
方法也很简单,只要做两处修改,如图:
再运行,
可以看到,在滚动的时候,倒计时功能依然在走,问题解决了!
网上有人提供了另外一种方法,只需要修改initTimer一个方法,initial方法保持不变,
看起来好像一样可以解决问题。
但是这个方法还会是有问题。
举个例子,我们给视图控制器加上一个busy方法:
循环1000次,并在控制台输出。然后在viewdidload里调用这个方法
这时运行程序,你会发现会先执行busy方法,busy方法循环完1000次之后才开始倒计时。我们看一下控制台的输出:
好啦,有些人可能会问了,这背后的原理是什么?这两种方法的区别是什么呢?为什么第一种能解决问题?第二种还是有瑕疵呢?
很好,有好奇心是成为优秀程序员的第一步。
我将在下一篇文章解释这背后的原理。不要走开,我马上就写第二篇哦