iOS非同期同時複数のネットワーク要求

1845 ワード

ドメイン名の切り花を説明する前に、まずくだらないことを言いましょう.ドメイン名の切り替え名前は自然に基礎ドメイン名の切り替えです.多くの場合、単一のサービス圧力が大きすぎると、要求がタイムアウトしたり、他の要求が異常に間違ったりするので、マルチドメイン名の切り替え操作が必要です.
マルチドメイン名の切り替えはまずマルチスレッドを使う必要がありますが、ここではGCDでももちろん他の方法を採用することができます.同時に複数のネットワークリクエストを非同期で同時実行し、リクエストが完了した後、すべてのリクエストが失敗した場合、すべてが通過した場合、最初のリクエストが共通のドメイン名アドレスになるように選択します.
もちろん、いくつか注意しなければならない点があります.まず、ドメイン名の切り替えを行うときは、複数のスレッドが同時に同じ要求変数にアクセスすることに相当します.複数のスレッドが同時に1つの変数にアクセスするときは、必ずこの変数の異常をもたらすことを知っています.だから、ここで私が追加したスピンロックは、GCDの信号量でもあります.これにより、複数のスレッドが同時に同じ変数にアクセスするたびに、1つを先に実行させ、次を実行させることができますが、その作成順序は依然として固定されていません.非同期同時性の要件にも合致します.
また、リクエストがすべて終了した後に通知を取得する必要があり、プロンプトやUIの変更を行うには「dispatch_group_t」通知に関する内容を使用する必要があります.
くだらないことはここまで直接コードを見ましょう.
- (void)asyncConcurrent{
    WeakSelf
    // , 
    NSArray *websiteArray = [ZFURLDefault get_websiteArray];
    dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
    for (int i = 0; i

ここのネットワークリクエストは自分で書いたネットワークリクエストに変更すればいいのですが、もう一つ注意しなければならないのは、スピンロックの機能を追加していなければ、メモリをテストするとメモリが漏れることに気づきます.私のところのプロジェクトは起動時に一度だけ呼び出され、機能は正常に崩壊しませんが、リスクなので、枷は欠かせません.
君の役に立つように~