0

我正在阅读Ray Wenderlich 应用内购买教程,我只是想了解它的块部分。

  1. _completionHandler = [completionHandler copy];为什么copy要使用块分配给这个变量?
  2. 这个块:

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

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

4

1 回答 1

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

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

于 2013-10-07T05:16:55.203 回答