我正在阅读Ray Wenderlich in-app purchases tutorial,我只想了解其中的部分内容。
_completionHandler = [completionHandler copy];
为什么copy
用于为此变量分配块?此块:
[[RageIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) {
if (success) {
_products = products;
[self.tableView reloadData];
}
[self.refreshControl endRefreshing];
}];
作为参数传递给方法,但该方法存在于另一个类中。另一个班级将如何引用此课程tableview
和refreshControl
?
答案 0 :(得分:2)
堆栈中存在块。为了在它超出范围后保持一个块,你需要copy
它将它移动到堆。然后,您可以将其视为任何其他对象,并在以后使用它。在该示例中,他们将块复制到ivar,以便可以在另一种方法中使用。
当您将块作为参数传递时,它会封装来自其本地范围的所有变量,并且可以在它们超出范围后访问它们。请参阅文档here。