使用 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
我看过很多关于积木的不同答案,但我仍在努力弄清楚如何使用它。
这是我目前所知道的...
@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