将一些任务分配给“后台线程”并在完成后在主线程上执行任务的最佳方法是什么?

时间:2014-02-28 18:34:37

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

我正在学习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之上创建一个类别吗?

1 个答案:

答案 0 :(得分:2)

最常见的做法就是:

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];

P.S。你的分号风格是独一无二的:D