xcode - ios loading问题
PHP中文网
PHP中文网 2017-04-18 09:04:53
0
3
417
// 操作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 メソッドを調整する必要はありません。代わりに、時間のかかる操作を特定し、時間のかかる操作を非メインスレッドに配置する必要があります。そうしないと、インターフェイスがフリーズします。

リーリー

あなたの質問では、この文の実装が重要です。具体的にどのスレッドで実行したかをよく確認してください。

いいねを押す +0
伊谢尔伦

メソッドはメインスレッドで実行されていますか?このコードは次のループまで実行されないため、読み込みアニメーションが表示される前に以下のコードが実行されます。 dispatch_async を削除すると同期されます。 downLoadFlieToThePhoneWithThreeModel:model は同期ですか、それとも非同期ですか?

いいねを押す +0
小葫芦

GCD内のスレッドはスレッド内で実行するとスタックしてしまうので、まず[NSThread currentThread].isMainThreadを使ってメインスレッドを決定し、メインスレッドであれば直接表示します。
操作 2 も、メインスレッド内にあるかどうかを確認し、メインスレッド内にある場合は、GCD を介して別のスレッドで実行されます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート