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 に答える