三个列表,因为我使用了一个数据源,在弱网的情况下,随便点击刷新,就会出现数据错乱。
没加锁之前的写法,虽然我在每次刷新之前都清空了数据源,但是还是出现了数据错误的情况,是因为在快速下啦加载和上啦刷新的同时,2个线程同时对数据源操作,如果在2个线程都判断infomations
为空时,都添加数据,此时就会出错。
[NetWorkClient getMessageList:noticeType page:page success:^(id response) {
if ([response[@"code"] integerValue] == 100) {
NSArray *arr=response[@"data"][@"messageList"];
if (arr.count<=0) {
[self.mainTableView.mj_footer endRefreshingWithNoMoreData];
}else{
if (_currentPage == 1) {
[_infomations removeAllObjects];
[self.infomations addObjectsFromArray:arr];
}else{
[self.infomations addObjectsFromArray:arr];
}
[self.mainTableView reloadData];
}
}
} failure:^(NSError *err) {
}];
解决办法,就需要对这个方法进行加锁。
[_mutexLock lock];
if ([response[@"code"] integerValue] == 100) {
NSArray *arr=response[@"data"][@"messageList"];
if (arr.count<=0) {
[self.mainTableView.mj_footer endRefreshingWithNoMoreData];
}else{
if (_currentPage == 1) {
[_infomations removeAllObjects];
[self.infomations addObjectsFromArray:arr];
}else{
[self.infomations addObjectsFromArray:arr];
}
[self.mainTableView reloadData];
}
}
[_mutexLock unlock];
参考:
http://www.cocoachina.com/ios/20161105/17967.html
https://segmentfault.com/q/1010000006002907