multithreading - 将某些任务分派(dispatch)到 "background thread"并在完成后在主线程上执行任务的最佳方法是什么?

标签 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 上创建一个类别吗?

最佳答案

最常见的做法是:

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

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

如果您计划修改 block 内的 someObject 并随后使用它,那么您应该在其前面添加 __block - 更多信息 here

__block id someObject = [self getSomeObject];

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

关于multithreading - 将某些任务分派(dispatch)到 "background thread"并在完成后在主线程上执行任务的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22103153/

相关文章:

cocoa - 停止/暂停 swift 应用程序一段时间

java - 并发 : Java Map

java - 使用 volatile 变量停止线程

java - ExecutorService 并在关闭后等待其他任务完成时接受新任务

objective-c - OS X如何申请 "clean"内存?

objective-c - 为自定义类中的全局变量设置默认值?

c++ - 在 C++ 中使用 OpenMP 并行化算法

ios - UIImageView 停止动画

ios - UIImage 未显示在 UITableView 中

ios - 更改特定 UIFont.TextStyle 的所有 UILabels