中級編第四期:初識GCD

1964 ワード

GCDといえば、皆さんは少しも知らないと思います.そう、私たちがプロジェクト開発の過程で最もよく使うスレッド処理はそれです.多くの友达がその運用とストーブの火が青くなったと信じています.次の弟は、それぞれのよく使われている方法をもう一度簡単に紹介しましょう.
同時キューバックグラウンドでスレッドを開いて実行
 
 __block NSInteger num = 0;
 dispatch_async(dispatch_get_global_queue(0, 0), ^{
     num++;
     NSLog(@"async1 = %ld", num);
 });
 NSLog(@"global = %ld", num);

プライマリ・キューは、プライマリ・スレッドで実行されます.
 
 dispatch_async(dispatch_get_main_queue(), ^{
        num++;
        NSLog(@"async2 = %ld", num);
    });
 NSLog(@"main = %ld", num);

最終的に実行されるのはホームチーム列のタスクですが、バックグラウンドキューと他の2つのlogの順番は必ずしもそうではありません.だから、UIの更新をホームチーム列に置いておきます.そうすれば、データが受信されてからUIを変更するに違いありません.
一度に実行すると、一度だけ実行されます.一般的には、単一の例の作成に使用します.
 
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSLog(@"2");
    });

遅延実行は、一般的にはメインチームの列に置いて遅延しますよ.同時キューを使うと、新しいサブスレッドが開きますよ.ただし、タイミングを把握するように注意してください.
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"3");
    });

キューグループを作成してキューを管理します.notifyを実行すると、キューのタスクの要約、つまりグループ内のすべてのスレッドの実行が終了してから、ここの要約タスクを実行します.
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
        NSLog(@"3++");
    });
    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
        NSLog(@"3+");
    });
    dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
        NSLog(@"3++++++1");
    });

はい、以上はプロジェクトで最もよく使われるGCD技術に関する方法ですよ.実は簡単ですが、パッケージ化されています.その底にはNSOperationに似たものがあると思いますよ.だから、スレッドをキャンセルするなど複雑な方法をしたいなら、NSOperationを使うことをお勧めします.結局、底のクラスですよ.
ほとんどのスレッドの操作は、基本的に時間のかかる方法を解決するために来ていますよ.時間があれば、その高度な応用をもう一度調査します.
婉華はここで、グループの中で交流、分かち合うことを知っている仲間たちに感謝します.あなたたちがいるので、私はとても楽しかったです.私はあなたたちと一緒に進歩したいです.