美文网首页iOS编程精华收录
NSThread sleep阻塞主线程导致UI没有及时更新的问题

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

作者: Hawley | 来源:发表于2017-04-26 17:52 被阅读134次

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

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

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

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

    [NSThread sleepForTimeInterval:0.001];

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

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

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

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/jiimyttx.html