之前学习Swift时看到一篇博客介绍了动态化绘制八种排序算法,于是我就写了个OC版的。github链接地址
至于八种算法的详细实现代码可以参考我上面给的github链接,原理解释请参考原博客地址。
重点是在这里面遇到的一个主线程阻塞的坑。
这里可视化UI交互的原理:在上方输入元素个数后,程序会生成相应个数的随机数,同时下图会生成相应个数的SortView,随机数的大小就反应在SortView的高度上,排序的时候我们每交换两个元素,其对应位置的SortView的高度进行交换,这样就能清晰的看到排序的过程了,由于整个过程太快,每次交换时加了一个线程的sleep。
[NSThread sleepForTimeInterval:0.001];
问题就出在这个sleep里,点击排序之后整个过程并没有如想象的那样显示了排序的交换过程,而是点击了排序之后过了十几秒,SortView突然一下的变了,
我打印了下线程,发现所有操作都是在住线程完成的,并没有开其他的线程,所以可以肯定是这个sleep阻塞了主线程,所以为了达到我们要的效果,在排序运算的时候我们需要异步执行一个串行队列
然后在主线程中的回调中去更新SortView的高度
搞定了,来看看运行效果,完美!!!
网友评论