一个简单的socket+UItableView实现的聊天程序,引起的iOS内存管理的困扰!!!!
到了项目要结尾的时候了,真心有个蛋疼内存的问题无解,先求指正。如果明天还不能解决,本人决定重构这一部分的代码了。。
我用一个了一个第三方的 AsycSocket 类获得克客户那边提供的Socket 然后就剩下的工作似乎就简单了,双方协议好 socket消息的封装格式,然后iOS客服端解析 每条消息,然后显示在聊天的UI中,UI我的实现思路是这样的,用tableView的每一个Cell来显示每条信息。选择这个控件的理由如下: 1,能方便的上下滑动,方便用户查看历史聊天纪录; 2,用户发送的信息做了图文混排生成一个UIVIew,每个UIVIew方便添加到界面上,3,每接受一条消息,UITableView自动滚动到最后一行,用户每次看到都是最新的信息。
我接受的消息是放到一个 NSMutableArray *chatArr中的,然后有有新的消息进来,就加入数组,最多保存50条聊天纪录,超过则回按照先进 先出的原则删除掉旧的消息,然后用这个数组作为tableView的数据源 ;
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [chatArr count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SettingCell"];
if (!cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SettingCell"] autorelease];
}
else {
//移除单元格的子视图,为了重复使用
if([[cell.contentView subviews] count] >0)
{
for (UIView *temp in [cell.contentView subviews]) {
[temp removeFromSuperview];
}
}
}
/*ImagesCharacterArrange 是实现图文混排的View的,我确定介个没有内存泄漏*/
ImagesCharacterArrange *tempI_imageCharact = [[ImagesCharacterArrange alloc] init];
tempI_imageCharact.backgroundColor=[UIColor clearColor];
UIView *mesgeView = [tempI_imageCharact imagesCharactersArrange:[self getSingeMesgeView:row isPulic:NO] maxWidth:305 peopleName:[self getSingeMesgeHeader:row isPulic:NO] fontStyle:3];
[cell.contentView addSubview:mesgeView];
[tempI_imageCharact release];
}
}
.......
if(有新的消息){
数组处理
[tableView reload];
}
兄弟们,我的问题来了,,每当有新的消息进来的时候,或者从别的地方切换到这个聊天窗口,内存都会血淋淋的增加好多
照这样的内存泄漏速度,用户聊天半个小时,程序必然跪,小弟用各种用工具查过,这一块尽然活生生的没有查出异常。
大家又看出什么端倪,或者有什么其他的做这种方式聊天的方式嘛,新手迷途求指点!
[解决办法]
首先确认的一点是 你是不是使用的ARC?
你可以先看一下这个问题 排除是否是框架本身的问题如果不是框架的问题就要考虑是设计的问题
那就要具体在看代码了....
[解决办法]
设置断点啊 一步一步看代码怎么走的
[解决办法]