我需要在两个块中执行相同的代码串(我正在使用ARC):
__weak typeof(self) weakSelf = self;
[_dataProvider doA:^(NSError *error) {
[weakSelf handleError:error];
}];
在另一个地方我打电话:
__weak typeof(self) weakSelf = self;
[_dataProvider doB:^(NSError *error) {
[weakSelf handleError:error];
}];
然后我有我的经纪人:
- (void)handleError:(NSError *)error {
[self.refreshControl endRefreshing];
[self.tableView reloadData];
}
以这种方式使用它可以节省吗?请注意handleError:
方法内部使用self
。如果没有,那么这里适当的方法是什么? BTW:self是一个viewController,可以解除分配(doB:和doA:块基于网络,所以可能很慢)。
答案 0 :(得分:2)
这样做是不安全的,即使许多人这样做也是如此。
当对齐时,您应该将“weakSelf”模式与块一起使用。
在您的示例中,“weakSelf”模式不合理,因为self
没有对strong
的任何block
引用。您可以这样使用:
[_dataProvider doA:^(NSError *error) {
// here you can use self, because you don't have any strong reference to your block
[weakSelf handleError:error];
}];
如果您对strong
(例如属性或实例变量)有block
引用并且您正在{{1}内捕获self
,请使用“weakSelf”模式例如:
block