使用 objective-C 块编写完成处理程序

Using objective-C blocks to write a completion handler

我看过很多关于积木的不同答案,但我仍在努力弄清楚如何使用它。

这是我目前所知道的...

@interface myController ()
   typedef void (^CompletionBlock)();
@end

然后我声明了一个这样的方法:

-(void)reloadDataWithCompletions:(CompletionBlock)completionBlock{
    [self.tableView reloadData];
    completionBlock();
}

不知道completionBlock中的代码怎么写。我是否编写另一个名为 completionBlock 的方法?像这样

-(void) completionBlock{
    // do something here once the first method is finished?
 }

你需要调用reloadDataWithCompletions:方法传入你想要执行的块。像这样:

[self reloadDataWithCompletions:^{
    // The code you want executed in the block
}];

顺便说一句 - 在这种情况下不需要块。只有在处理在其他线程上进行的异步调用时才真正需要完成块。由于您的 reloadDataWithCompletions: 方法仅在 table 视图上调用 reloadData,并且该方法是同步的,因此使用块毫无意义。

在这种情况下,你会得到相同的结果:

-(void)reloadData {
    [self.tableView reloadData];
}

并称它为:

[self reloadData];
// code you want executed after the reload is done