2
아래 코드를 고려하십시오. 이 작업이 실행되면 활동 표시기가 나타나고 움직이며, 동시에 "테스트"가 콘솔에 반복적으로 기록됩니다. 왜?메인 스레드가 차단되었을 때 UIKit은 어떻게 애니메이션 UIActivityIndicator를 그립니까?
"indentor"의 다음 다시 그리기 전에 "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");
}
});
}
분명히 모든 애니메이션은 Apple이 다른 스레드에서 타이머로 구현 한 것입니다.이 스레드는 계속해서 (예 : 20hz 등) UI에 프레임 변경을 알립니다. – Fattie