0

通过 animateWithDuration 块内的点访问器访问 self 和 self 的属性是否安全?

我遇到了一些与扩展自身框架相关的动画故障,尤其是当我调用 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 回答