TableView 中 reloadData 时 EXC_BAD_ACCESS 的问题

2014-05-03 16:15:49 +08:00
 INT21H
我在使用 AFNetworking 库(1.x),然后在异步刷新时候,在

[AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON){
...

[self.jsonData addObjectsFromArray:JSON[@"objects"]];

dispatch_async(dispatch_get_main_queue(), ^{
[self.titleLabel setFrame:CGRectMake(60, 5, 100, 40)];
[self.tableView reloadData];
});

...
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){
...
}];

上面主要是在获得数据后,在主线程更新 UI(reloadData)。然后发现*有时候*,会出现 EXC_BAD_ACCESS,查看 crash report 显示是 [self.titleLabel setFrame:CGRectMake(60, 5, 100, 40)]; 这一行。

请问这样写是有什么问题么?
4120 次点击
所在节点    iDev
5 条回复
dorentus
2014-05-03 16:55:01 +08:00
non-ARC?

self.titleLabel 是什么,可能是它的问题吧
INT21H
2014-05-03 18:00:27 +08:00
@dorentus ARC

self.titleLabel 是自定义的一个 label,但是 setFrame 在主线程中操作也不会有问题吧?
alexrezit
2014-05-03 18:18:32 +08:00
__weak
cielpy
2014-05-03 18:37:44 +08:00
没记错的话[@"objects"]这咱写法是6.0才有的吧,那为什么不用AF 2.x版本呢。
block回调有对象的循环引用问题,这个我现在也没太搞明白,LS提到__weak应该是指这个问题吧
看看那个label setFrame的时候还在不在,然后数组有没有越界?
R0CKSTAR
2014-05-13 09:16:30 +08:00
Diagnostics里面把Enable Zombie Objects打开,看log就能知道是哪个对象野了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/110953

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX