メインスレッドをブロックしているため、非同期関数の実行を実行する必要があり、UI を使用できません。
stackoverflow の質問を見た後、非同期関数を実行するには 3 つの方法があることがわかりました。
例:
[NSThread detachNewThreadSelector:@selector(showSpinner:) toTarget:self withObject:self.view];
// or
[self performSelectorInBackground:@selector(showSpinner:) withObject:self.view];
// or
NSInvocationOperation *invOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(showSpinner:) object:self.view];
NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];
[opQueue addOperation:invOperation];
// or
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
[self showSpinner:self.view];
});
});
私の質問は、どのようにしてメインスレッドperformSelectorInBackground
にdetachNewThreadSelector
戻るのですか? それらが完了したことをどのように知っていますか?