ios – 弹出ViewController时停止执行GCD

前端之家收集整理的这篇文章主要介绍了ios – 弹出ViewController时停止执行GCD前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的应用程序中有一个 – [tableView reloadData]方法,为了使执行更快,我在下面的方法中用GCD调用它.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,1.5 * NSEC_PER_SEC),dispatch_get_main_queue(),^{

    [tableView reloadData];
});

但是当我弹出我的viewController时,应用程序崩溃了这条消息[SecondViewController numberOfSectionsInTableView:]:消息被发送到解除分配的实例0x7fe376206e10.我假设在从ViewController退出后仍然执行[reloadData].我该如何停止执行?我应该把它变成NSOperation吗?如果是这样,我该怎么做?

解决方法

您的代码存在一些问题.以下是导致崩溃的事件序列

1)该块捕获tableView并使其保持活动状态.

2)然后你的视图控制器被pop弹出,

3)块执行,tableView调用它的数据源(你的视图控制器),现在已经解除分配.

你可以通过停止上面的#1或#3来解决这个问题.我建议#1. (我在这里假设ARC)

__weak UITableView *weakTableView = tableView;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,^{
    [weakTableView reloadData];
});

如果这不起作用,其他东西可能会使tableView保持活跃状态​​.您应该调查究竟是在做什么,但您也可以通过阻止视图控制器dealloc方法中的#3来修复崩溃:

- (void)dealloc {
    self.tableView.dataSource = nil;
    self.tableView.delegate = nil;
}

猜你在找的iOS相关文章