dispatch_group_notify
これは、GCDを使用する場合に行うことです(テストされていませんが、ダウンロードが完了したときに、ダウンロードプロセスの状態を示すグローバルフラグと組み合わせて使用できるという教訓が得られ ます)。
-(void)downloadRecipes
{
//<--Start activity indicator-->
//isDownloading = YES; //<- Some global flag to indicate download in progress
//--or--
//[[NSNotificationCenter defaultCenter] postNotificationName:@"DownloadDidBegin"];
dispatch_block_t executionBlock =
^{
//Your download logic here
};
dispatch_block_t executionBlock_OnComplete =
^{
//isDownloading = NO; //<- Global flag indicates no longer downloading
//--or--
//[[NSNotificationCenter defaultCenter] postNotificationName:@"DownloadDidEnd"];
//<--Stop activity indicator-->
};
dispatch_queue_t someQueue = dispatch_queue_create("com.myapp.recipe.download", NULL);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, someQueue, executionBlock);
dispatch_group_notify(group, dispatch_get_main_queue(), executionBlock_OnComplete);
dispatch_release(group);
dispatch_release(queue);
}
オプションで、グローバルフラグを設定する代わりにNSNotificationCenter
、プロセスの開始時と完了時に通知を投稿するために使用できます。