关于AFNetworking sdk中的demo有一段代码中的疑问。 我之前处理网络请求的逻辑是:假如A push到 B。 B中开始网络请求,在未返回结果时pop出是是直接cancel掉网络请求的。(之前使用的是ASI) 这段时间看AFN时,demo中有段代码
- (void)reload:(id)sender {
[Post globalTimelinePostsWithBlock:^(NSArray *posts, NSError *error) {
if (error) {
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", nil) message:[error localizedDescription] delegate:nil cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"OK", nil), nil] show];
} else {
_posts = posts;
[self.tableView reloadData];
}
}];
}
我看代码中是把每个网络请求放在全局的queue中,因此pop时并没有cancel掉网络请求。但是在pop以后,B中的tableview已经不存在了,通过block的方式给tableview的数据源赋值,并且不会出现问题。是因为block中会抓取一份tableview么?或者应该怎样理解。。。
可以用
- (void)reload:(id)sender {
__weak B weakSelf = self;
[Post globalTimelinePostsWithBlock:^(NSArray *posts, NSError *error) {
if (error) {
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", nil) message:[error localizedDescription] delegate:nil cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"OK", nil), nil] show];
} else {
_posts = posts;
[weakSelf.tableView reloadData];
}
}];