ios - 在 UIView 的 animateWithDuration block 方法中 block 自身和点访问器的范围

标签 ios uiview uikit core-animation

通过 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/

相关文章:

ios - 主线程处理问题

iphone - 如何在 UIScrollView 中获取 UIView 中对象的位置

ios - UITextView 在行尾点击不应返回下一行中的单词

swift - 什么是 UIAlertController 处理程序以及如何使用它?

ios - 如果你使用 set RootViewController 是否会从内存中删除之前的 RootViewController?

ios - 设置变量值后,打印为未更改

iphone - iOS -- arc 下的 initWith 方法

ios - 导航 Controller 委托(delegate)方法没有得到调用

ios - UITableViewDiffableDataSource 可以检测到更改的项目吗?

ios - React-Native 包找不到 React header