通过 animateWithDuration block 内的点访问器访问 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];
}
}];
最佳答案
由于 View 不保留该 block ,因此在 block 内强捕获 self
是安全的。当 block 强烈捕获 self
(有意或无意地,通过访问实例变量)并被 View 保留时,例如,当使用 block 作为条形按钮项的响应时,就会出现问题。在这里, block 被执行并被丢弃。
关于ios - 在 UIView 的 animateWithDuration block 方法中 block 自身和点访问器的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13767155/