0

animateWithDurationブロック内のドットアクセサーを介して自己および自己のプロパティにアクセスするのは安全ですか?

以下のように、特にself.frameを呼び出すと、セルフフレームの拡張に関連するアニメーションの不具合が発生します。

[UIView animateWithDuration:timeInterval animations:^{
    self.citiesTableView.frame = CGRectMake(0, 100, 320, 120);
    self.frame = CGRectMake(0, 0, 320, 220);
} completion:^(BOOL completed){
    if (completed) {
        self.citiesTableView.frame = CGRectMake(0, 100, 320, 120);
        self.frame = CGRectMake(0, 0, 320, 220);
        [self.citiesTableView reloadData];
    }
}];
4

1 に答える 1

2

selfブロックはビューによって保持されないため、ブロック内を強力にキャプチャするのが安全です。selfブロックが強力に(意図的または誤って、インスタンス変数にアクセスすることによって)キャプチャされ、バーボタンアイテムの応答としてブロックを使用する場合など、ビューによって保持される場合、問題が発生します。ここでは、ブロックが実行されて破棄されます。

于 2012-12-07T16:40:18.060 に答える