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 方法创建新对象,而不是只用内存地址复制。

上一篇下一篇

猜你喜欢

热点阅读