美文网首页
Message from debugger: Terminate

Message from debugger: Terminate

作者: 红树歌童 | 来源:发表于2019-04-02 09:11 被阅读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 方法创建新对象,而不是只用内存地址复制。

    相关文章

      网友评论

          本文标题:Message from debugger: Terminate

          本文链接:https://www.haomeiwen.com/subject/glcibqtx.html