DDProgressHUD icon indicating copy to clipboard operation
DDProgressHUD copied to clipboard

多线程操作

Open liuwin7 opened this issue 7 years ago • 1 comments

修改多线程下异步的情况,在显示和隐藏的地方不能再使用OperationQueue,因为show方法的执行已经在OperationQueue,这样会影响到代码的顺序执行。很简单的情况,show的Operation,有可能会排dismiss后面。

dismissWithDelay: 应该把所有的代码块都放到Operation块中。

还有,这个sdk并不是不用考虑多线程,必须要考虑,其UI操作,dismiss和show,都必须在主线程里去做。

liuwin7 avatar Apr 06 '17 06:04 liuwin7

多谢提出,当时确实考虑不周,后续的使用当中,也没有测试这种情况。会造成你说的那种情况,由于重复的添加到OperationQueue ,dismiss会优先于show方法。

写这个ProgressHUD的初衷之一也是不想在调用dismiss和show方法时,还要回到主线程。还有就是在多处重复添加到主队列,是为了保证,SDK中每一个类单独拿出来使用时也都能实现这一初衷。比如用户想单独使用DDMaskView这个类时,单独拿出来使用即可

如果保留这一初衷,暂时想到两种方法:

  1. 对dismiss进行延时(比如0.01s)添加到主队列;并把dismissWithDelay: 所有的代码块都放到Operation块中。伪代码如下: mainqueue { delay(0.01) { mainqueue { 具体逻辑代码 } } }

  2. 只添加一次到主队列,比如在其他添加的地方判断,是否是主线程,如果是就不在添加到主队列。

或许有其他更优雅的方式,等有大块时间再仔细考虑。。。

mddios avatar Apr 06 '17 09:04 mddios