块是很棒的。因为我认为我了解它们,所以我想在更复杂的情况下使用它们。现在这些块正在踢我的脸,我正在尝试将其分解成可理解的部分。
假设我在这个伪代码中有两个块,方便地命名为
假设我在这个伪代码中有两个块,方便地命名为
blockA
和blockB
。第一个是一个简单的无参数块,它只打印一行。第二个接受一个类型为id
的参数xyz
:void (^blockA){ NSLog(@"Doing something"); };
void (^blockB)(id xyz){ [xyz doSomething]; };
运行blockA
时,我会像这样做:blockA();
或者当我想要针对主队列/线程时,我使用dispatch_sync
或_async
方法:
dispatch_sync(dispatch_get_main_queue(), blockA);
虽然我知道如何使用像 blockB(someObject);
这样的参数来调度 blockB
,但我不知道如何在主线程上显式调用它。我试图寻找类似下面这行代码的东西,但是当然,这并不是正确的方法:
dispatch_sync(dispatch_get_main_queue, blockB, someObject);
现在我尝试将该块包装在另一个块中,但说实话,这看起来并不对,并且感觉它引起了比解决更多的问题。除了包装块以分派一个或多个参数的块到主队列/线程之外,还有其他方法吗?
dispatch_async(dispatch_get_main_queue(), ^{ block(object);});
有什么区别? - izzy