1
GCD를 배우려고하기 때문에 아직 어떻게 작동하는지 완전히 파악하지 못했습니다. 어떤 이유로, 다음 메소드를 호출 한 후 프레임 속도가 영구적으로 떨어집니다. 디스패치 기능을 사용하지 않고 메인 루프에 데이터를 쓰면 프레임 속도는 60으로 유지됩니다. 이유는 모르겠습니다.dispatch_async 및 프레임 속도
-(void)saveDataFile {
_hud = [MBProgressHUD showHUDAddedTo:self.parentView animated:YES];
_hud.labelText = NSLocalizedString(@"Saving data...", nil);
dispatch_queue_t myQueue = dispatch_queue_create("myQueueName", NULL);
dispatch_async(myQueue, ^(void) {
@autoreleasepool {
id data = [self.model getData];
if (data != nil) {
NSString *filePath = @"myPath";
[data writeToFile:filePath atomically:YES];
}
}
dispatch_async(dispatch_get_main_queue(), ^(void) {
[_hud hide:YES];
});
});
}
대기열을 만드는 것은 비용이 많이 드는 작업이므로 부담해야 할 때마다해야한다고 생각합니다. 대신 대기열을 생성하고 인스턴스에 대한 참조를 유지하거나 분명히 백그라운드에서 실행하려고하므로 기존 전역 대기열 중 하나 (디스패치_get_global_queue)를 우선 순위에 따라 전달하십시오. \ [EDIT \] 그냥 * 영구적 인 드롭 읽기, 나는 왜 당신이 영구적 인 프레임 속도 드롭을 얻을지 모르겠다. 그래도 반복적으로'dispatch_queue_create '를 호출하지 않는 것이 좋습니다. – zneak
문제가 발생한 후 문제가 HUD와 관련이있는 것 같습니다. 이러한 전화를 꺼내면 프레임 속도가 떨어지지 않습니다. 내가 잘못 구현해야합니다. 그 수업을 자세히 들여다 보러 갈거야. – anna