我们都在后台进行一些冗长的操作时显示活动指标。尽管活动指示器显示一个不断旋转的轮子,但它不会给主线程带来负担,因为同一屏幕上的其他UIComponents
仍会对触摸做出反应。为什么不断的动画UIActivityIndicator不会阻塞主线程?
我觉得我所知道的:
我知道所有的触摸事件是由主线程处理,和主队列被用来排队的事件。考虑到主队列是序列化队列,每次只有一个任务可以在任何时间点运行,同时触摸事件应该在主队列中排队,而我的主线程忙于刷新UIActivityIndicator的屏幕/调用drawrect。
研究:
我已经调查的第三方活动指标的代码。他们中的大多数使用CABasicAnimation
并且在动画上总是重复重复。虽然很少工作直接使用NSTimer以较小的延迟重复呼叫drawrect
。他们的代码是有效的,因为调用drawrect
有一个小小的延迟,而方法drawrect
本身重量轻。
无它不会采取负载关闭主线程,而是他们小心地放置在主线程负载足以让他们去动画还保持主线程自由地处理触摸事件
我想什么知道:
1 - 该策略是否实施活动指标是正确的?或者像这样的语句
self.timer =[NSTimer timerWithTimeInterval:0.1 target:self
selector:@selector(setNeedsDisplay) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
在我看到的第三方活动指标中有什么特殊效果?
2 - 如果我运行CABasicAnimation/transaction并重复动画,永久会对主线程的负载有什么特殊效果,而不是手动重复调用setNeedsDispaly/drawrect?
你想通过定期调用'setNeedsDisplay'实现什么功能?这没有任何意义。 –
假设我想要根据进度量/任何进度动画旋转/加载不同图像的图像我想要执行大部分第三方框架在UIView的drawRect方法中处理这些事情并且为了触发drawRect他们调用setNeedsDisplay –
@downvoter:只是因为你不明白这个问题并没有使你有资格对这个问题投下赞成票。如果你不明白的问我,如果你在这里知道答案评论 –