美文网首页
GCD多线程

GCD多线程

作者: AsABurger | 来源:发表于2017-05-29 13:19 被阅读0次

    系统提供的dispatch方法

       //后台执行:
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            //something
        });
        
        //主线程执行:
        dispatch_async(dispatch_get_main_queue(),^{
           //something
        });
        //一次性执行:
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken,^{
            //code to be executed once
        });
        //延迟两秒执行
        double delayInSeconds = 2.0;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
        dispatch_after(popTime, dispatch_get_main_queue(), ^{
            //code to excuted on the main queue after delay
        });
    

    自定义一个dispatch_queue_t

    dispatch_queue_t urls_queue = dispatch_queue_create("queueName", NULL);
        dispatch_async(urls_queue, ^{
            //your code
        });
    //    dispatch_release(urls_queue);
    

    让后台两个线程并行执行,等待两个线程都结束后,再汇总执行结果

        dispatch_group_t group = dispatch_group_create();
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            //并行执行的线程一
        });
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            //并行执行的线程二
        });
        dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
            //当一二执行完后执行的结果
        });
    

    修改block之外的变量

    默认情况下,block中访问的外部变量是复制过去的,写操作不会对原变量生效。在变量前加__block可让写操作生效。

        __block int a = 0;
        void (^foo)(void) = ^{
            a = 1;
        };
        foo();
    

    以上内容整理自唐巧的《iOS开发进阶》一书

    声明一个带有返回值和参数的block

        int (^func)(int,int) = ^(int a,int b){
            a = a + b;
            return a;
        };
        int b = func(3,4);
    

    相关文章

      网友评论

          本文标题:GCD多线程

          本文链接:https://www.haomeiwen.com/subject/bjbkfxtx.html