【问题标题】:Need assistance understanding part of blocks需要帮助理解部分块
【发布时间】:2013-10-07 05:12:45
【问题描述】:

我正在阅读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

【问题讨论】:

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


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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多