阻止UIView的animateWithDuration块方法中的self和dot访问器的作用域

时间:2012-12-07 16:33:37

标签: ios uiview uikit core-animation

通过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];
    }
}];

1 个答案:

答案 0 :(得分:2)

由于视图不保留块,因此可以安全地在块内捕获self。当块强烈地(有意地或错误地,通过访问实例变量)捕获self并且由视图保留时,例如,当使用块作为条形按钮项的响应时,出现问题。这里,块被执行并被丢弃。