xcode - ios loading问题
PHP中文网
PHP中文网 2017-04-18 09:04:53
0
3
416
// 操作1
dispatch_async(dispatch_get_main_queue(), ^{
    [SVProgressHUD show];//loading动画
});

// 操作2
NSArray *files = @[model];
DownFileDataControl *downVC = [[DownFileDataControl alloc]init];
downVC.rootViewController = curViewController;
downVC.thisModel = model;
downVC.modelList = files;
[downVC downLoadFlieToThePhoneWithThreeModel:model];//根据model对象里的一个文件地址去读取文件。读取完全后跳转到一个新的页面

(SVProgressHUD 是异步操作的话有办法改成同步吗)

上述代码,在一个方法体内写的,因为读取文件的时间比较长,所以想着在读取前加一个loading效果,但是加上之后,发现loading依然是等操作2执行完毕后才显示效果,操作2执行时候(读取文件)程序有一种假死的感觉,请问,是什么原因,如何让loading先出来,再执行操作2

PHP中文网
PHP中文网

认证0级讲师

모든 응답(3)
Peter_Zhu

일반적으로 ProgressHUD 방법을 조정할 필요는 없습니다. 대신 시간이 많이 걸리는 작업을 확인한 다음 시간이 많이 걸리는 작업을 메인 스레드가 아닌 스레드에 배치해야 합니다. 그렇지 않으면 인터페이스가 정지됩니다.

으아악

귀하의 질문에서 이 문장의 구현이 핵심입니다. 정확히 무엇을 했고, 어떤 스레드에서 했는지 잘 확인하세요.

伊谢尔伦

메서드가 메인 스레드에서 실행되나요? dispatch_async는 로딩 애니메이션을 비동기적으로 실행하기 위해 메인 스레드로 전달됩니다. 이 코드는 다음 루프까지 실행되지 않으므로 로딩 애니메이션이 표시되기 전에 아래 코드가 실행됩니다. Dispatch_async를 제거하면 동기화됩니다. downLoadFlieToThePhoneWithThreeModel:model은 동기식인가요, 비동기식인가요?

小葫芦

GCD의 스레드가 스레드에서 실행되면 중단되므로 먼저 [NSThread currentThread].isMainThread를 사용하여 메인 스레드인 경우 직접 표시됩니다.
작업 2도 메인 스레드에 있는지 확인합니다. 메인 스레드에 있으면 GCD를 통해 다른 스레드에서 실행됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿