【问题标题】:What's the best way to dispatch some task to a "background thread" and perform a task on the main thread when finished?将某些任务分派到“后台线程”并在完成后在主线程上执行任务的最佳方法是什么?
【发布时间】:2014-02-28 18:34:36
【问题描述】:

我正在学习GCD,我想知道以下是否可以,或者: 有更好的方法吗?

我也想知道我是否需要在下面削弱self。我正在使用ARC

id someObject = [self getSomeObject] ;

dispatch_queue_t newThread = dispatch_queue_create("New thread", NULL) ;

dispatch_async(newThread, ^
               {
                   [self doSomeStuff] ;

                   [someObject doSomeStuffOnMyObject] ;

                   /*
                    Back on the main thread
                    */
                   dispatch_async(dispatch_get_main_queue(), ^
                                  {
                                      [self doSomeStuffMore] ;

                                      [someObject doSomeStuffOnMyObjectMore] ;
                                  }) ;
               }) ;

那么,如果这是一个好方法,我应该在NSObject 上创建一个类别吗?

【问题讨论】:

    标签: multithreading cocoa-touch cocoa automatic-ref-counting grand-central-dispatch


    【解决方案1】:

    最常见的做法是你有什么:

    dispatch_async(dispatch_get_global_queue(priority, flags), ^(void) {
        // code
    
        dispatch_async(dispatch_get_main_queue(), ^(void) {
            // code
        });
    });
    

    如果您打算在块内修改someObject 并在之后使用它,那么您应该在其前面加上__block - 更多信息here

    __block id someObject = [self getSomeObject];
    

    附:你的分号风格是独一无二的:D

    【讨论】:

    • 谢谢!很高兴能做好!我的分号风格是法式风格! (我们在“;”之前放了一个空格)...
    猜你喜欢
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2019-08-18
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多