Message from debugger: Terminate
2019-04-02 本文已影响0人
红树歌童
突然反馈回来点进联系人列表,有时候数据无法显示,点击空白崩溃。
首先复现了一边问题,进入联系人列表,内存突然从50M左右,到200、300M。。。闪退。确定该页面发生内存泄漏。
使用leak在内存树结构中,发现一个网络请求耗内存巨大,断点跑之后发现进入死循环。网络请求返回代码部分如下:
if (chnArr.count>=1) {
NSMutableArray*endArray=[NSMutableArray array];
NSMutableArray*depArr=[NSMutableArray array];
for (int i=0; i<chnArr.count; i++) {
FriendUserModel*model=[FriendUserModel yy_modelWithDictionary:chnArr[i]];
[depArr addObject:model];
}
self.topArr=depArr;
if (self.topArr&&self.topArr.count>0) {
//endArray=self.topArr; //引起泄漏原因
endArray = [NSMutableArray arrayWithArray:self.topArr];
}
if (self.depArr&&self.depArr.count>0) {
for (int i=0; i<depArr.count; i++) {
id model=depArr[i];
[endArray addObject:model];
}
}
self.bottomDataSource=endArray;
dispatch_async(dispatch_get_main_queue(), ^{
[self.friendsTable reloadData];
});
}
注释代码处为问题原因,表现在使得下面的depArr无限循环,topArr地址为depArr,endArr地址为topArr。
解决方法:使用 arrayWithArray 方法创建新对象,而不是只用内存地址复制。