Ok。だから私は、次のビューコントローラへの移行の前にすべての重い読み込みを処理するGCDを使用しようとしています。私は大規模なアーカイブファイルを開いて、時間がかかるそれらを抽出しています。GCDをスレッディングに使用する方が良い方法
全体のプロセスは、このようなものです:
UICollectionViewCell>ディスプレイアクティビティインジケータをクリック> GCDはperformSelectorを使用して重い負荷>コール遷移セレクタの世話をしてみましょう:onThread:.....
問題私がmainThreadを使用すると、トランジションが速すぎるし、すべての負荷が有効になるまでに時間がかかり、トランジションがひどくなり、currentThreadを使用している間に非常に時間がかかります。アプリ。
-(void)someMethod
{
//activity Indicator before transition begins
UIActivityIndicatorView *activity=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[activity setFrame:self.view.bounds];
[self.view addSubview:activity];
[self.view bringSubviewToFront:activity];
activity.hidesWhenStopped=YES;
[activity startAnimating];
dispatch_queue_t transitionQueue;
transitionQueue = dispatch_queue_create("com.app.transitionQueue", NULL);
dispatch_async(transitionQueue,^{
//heavy lifting code
viewerPVC=.....
dispatch_async(dispatch_get_main_queue(),^{
[activity stopAnimating];
[self transitionToMangaViewer:mReaderPVC];
});
};
}
-(void)transitionToViewer:(ViewerPVC*)viewerPVC
{
[self.navigationController pushViewController:mReaderPVC animated:YES];
}
だから最初の提案を試みたが、CollectionViewControllerはまだ何かをしてみてください、あなたはGCDを使用しているときNSThreadを使用する必要があるはずの移行
どのスレッドがロードしても、同じ時間がかかります。これはネットワークのパフォーマンスに依存します。データをプリフェッチできない場合は、ユーザーに良いフィードバックを提供するだけです。私はあなたのバックグラウンドスレッドでUI更新(アクティビティビューの停止など)を実行していることに気付きました。これらのアクションをメインキューにディスパッチする必要があります。あなたはNSThreadで何をしようとしていますか?あなたは一般的にこのクラスを使用しません。 – Paulw11