NSThread sleep阻塞主线程导致UI没有及时更新的问题

之前学习Swift时看到一篇博客介绍了动态化绘制八种排序算法,于是我就写了个OC版的。github链接地址

至于八种算法的详细实现代码可以参考我上面给的github链接,原理解释请参考原博客地址

重点是在这里面遇到的一个主线程阻塞的坑。

这里可视化UI交互的原理:在上方输入元素个数后,程序会生成相应个数的随机数,同时下图会生成相应个数的SortView,随机数的大小就反应在SortView的高度上,排序的时候我们每交换两个元素,其对应位置的SortView的高度进行交换,这样就能清晰的看到排序的过程了,由于整个过程太快,每次交换时加了一个线程的sleep。

[NSThread sleepForTimeInterval:0.001];

问题就出在这个sleep里,点击排序之后整个过程并没有如想象的那样显示了排序的交换过程,而是点击了排序之后过了十几秒,SortView突然一下的变了,

我打印了下线程,发现所有操作都是在住线程完成的,并没有开其他的线程,所以可以肯定是这个sleep阻塞了主线程,所以为了达到我们要的效果,在排序运算的时候我们需要异步执行一个串行队列

然后在主线程中的回调中去更新SortView的高度

搞定了,来看看运行效果,完美!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,826评论 25 709
  • layout: posttitle: 《Java并发编程的艺术》笔记categories: Javaexcerpt...
    xiaogmail阅读 5,885评论 1 19
  • 下面是我自己收集整理的Java线程相关的面试题,可以用它来好好准备面试。 参考文档:-《Java核心技术 卷一》-...
    阿呆变Geek阅读 14,918评论 14 507
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 一、爱的表达 我对女儿爱的感觉越来越多。经常把“我爱你”挂在嘴边。我和女儿的关系越来越好了。 二、接纳感受练习 女...
    妈妈随笔阅读 148评论 2 1