需要帮助了解块的一部分

时间:2013-10-07 05:12:46

标签: ios objective-c objective-c-blocks

我正在阅读Ray Wenderlich in-app purchases tutorial,我只想了解其中的部分内容。

  1. _completionHandler = [completionHandler copy];为什么copy用于为此变量分配块?
  2. 此块:

    [[RageIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) {
        if (success) {
            _products = products;
            [self.tableView reloadData];
        }
        [self.refreshControl endRefreshing];
    }];
    

    作为参数传递给方法,但该方法存在于另一个类中。另一个班级将如何引用此课程tableviewrefreshControl

1 个答案:

答案 0 :(得分:2)

  1. 堆栈中存在块。为了在它超出范围后保持一个块,你需要copy它将它移动到堆。然后,您可以将其视为任何其他对象,并在以后使用它。在该示例中,他们将块复制到ivar,以便可以在另一种方法中使用。

  2. 当您将块作为参数传递时,它会封装来自其本地范围的所有变量,并且可以在它们超出范围后访问它们。请参阅文档here