web-dev-qa-db-ja.com

dispatch_asyncとiOSでのブロック

このコードの意味は何ですか?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        TMBaseParser *parser=[[TMBaseParser alloc] init];
        parser.delegate=self;
        NSString *post =nil;
        NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
        [parser parseForServiceType:TMServiceCategories postdata:postData];
    });

簡単に説明してください。

33

のコード

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

});

バックグラウンドスレッドで非同期に実行されます。これは、データの解析に時間がかかるタスクであり、メインスレッドをブロックしてすべてのアニメーションを停止し、アプリケーションが応答しなくなるためです。

さらに詳しく知りたい場合は、Appleのドキュメントである Grand Central Dispatch および Dispatch Queue を参照してください。

101
Marcin Kuptel

上記のコードスニペットが機能しない場合は、これを試してください:

目的C:

dispatch_async(dispatch_get_main_queue(), ^{

});

UI更新は常にメインキューから実行する必要があります。 「^」記号は、ブロックの開始を示します。

スウィフト3:

DispatchQueue.global(qos: .background).async {
    print("This is run on the background queue")

    DispatchQueue.main.async {
        print("This is run on the main queue, after the previous code in outer block")
    }
}
6
Md Rais

それは、Grand Central Dispatchブロックです。

  1. dispatch_asyncは、別のキューで実行する呼び出しです。
  2. dispatch_get_global_queueは、目的の特性を持つ特定のキューを取得するための呼び出しです。たとえば、コードをDISPATCH_QUEUE_PRIORITY_BACKGORUNDで低い優先度で実行できます。
  3. ブロック内では、コードは何もしません。投稿はnilに設定されます。次に、メッセージがnil "dataUsingEncoding"に送信されます。 Objective Cはnilへのすべての呼び出しをドロップします。 最後に、パーサーは "nil" postDataに送信されます。
  4. せいぜい、これは何もしません。最悪の場合、パーサーにnilデータを送信するとクラッシュします。
2
rismay