请考虑以下代码。运行此操作时,将显示活动指示器并设置动画,同时将“test”重复记录到控制台。为什么呢?
我希望活动指示符出现在屏幕上但无法设置动画,因为在下次重新绘制活动指示符之前在主队列上执行“test”块,并且该块永远不会完成执行。
UIKit是否将活动指示器从主线程中拉出来?
- (void)viewDidLoad {
[super viewDidLoad];
UIActivityIndicatorView *v = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[self.view addSubview:v];
v.center = self.view.center;
[v startAnimating];
dispatch_async(dispatch_get_main_queue(), ^{
while (1) {
NSLog(@"test");
}
});
}
答案 0 :(得分:1)
核心动画编程指南
说明:
因为它操纵静态位图,基于图层的绘图 与传统的基于视图的绘画有很大不同 技术。使用基于视图的绘图,通常会对视图本身进行更改 导致调用视图的drawRect:方法重绘内容 使用新参数。但是以这种方式画画是昂贵的,因为 它是在主线程上使用CPU完成的。核心动画避免了 尽可能通过操纵缓存的位图来获得此费用 硬件实现相同或类似的效果。
并非所有绘图都会在主线程上发生。