小弟新人,求大神们帮忙,内存未泄露,但是tableviewcell 数据源刷新内存持续上涨

nicookly 2014-09-21 06:03:11
static NSString *TableSampleIdentifier = @"TableSampleIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TableSampleIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableSampleIdentifier];

//在添加cell时添加边线框
UIView *backView = [[UIView alloc] initWithFrame:cell.frame];
backView.layer.masksToBounds = YES;
backView.layer.cornerRadius = 1.0;
backView.layer.borderWidth = 1.0;
backView.layer.borderColor = [[UIColor lightGrayColor] CGColor];
[cell addSubview:backView];
}

NSUInteger row = [indexPath row];
cell.textLabel.text = [[_chapterList objectAtIndex:row]objectForKey:@"type_name"];
return cell;



这是数据源内代码,向大神们求解,每次调用[self.tableview reloadData];后内存不断上涨。(ARC环境下)
...全文
446 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
淡淡的土打捕 2016-03-10
  • 打赏
  • 举报
回复
解决了吗??
xp5556 2014-09-22
  • 打赏
  • 举报
回复
看起来还是没问题
Bannings 2014-09-21
  • 打赏
  • 举报
回复
引用 27 楼 nicookly 的回复:
引用 25 楼 zhangao0086 的回复:
不需要了,只实现dealloc看下就行了
多谢多谢哈,呵呵
解决了没有?
nicookly 2014-09-21
  • 打赏
  • 举报
回复
引用 25 楼 zhangao0086 的回复:
不需要了,只实现dealloc看下就行了
多谢多谢哈,呵呵
nicookly 2014-09-21
  • 打赏
  • 举报
回复
[quote=引用 25 楼 zhangao0086 的回复:] 不需要了,只实现dealloc看下就行了[/quote#import "myNSMutablediactionay.h" 我加了头文件后@property(strong, nonatomic) myNSMutablediactionay *typeDict; 提示未知数据类型
Bannings 2014-09-21
  • 打赏
  • 举报
回复
不需要了,只实现dealloc看下就行了
nicookly 2014-09-21
  • 打赏
  • 举报
回复
引用 23 楼 zhangao0086 的回复:
引用 22 楼 nicookly 的回复:
[quote=引用 21 楼 zhangao0086 的回复:] 我觉得最有可能的还是数据源刷新的时候,原有的数据没有清干净,这样吧,你的数据源_chapterList里的对象如果是自定义的对象,你就在dealloc里下断点,看数据源刷新的时候原数据有没有释放,如果是字典的话你也可以子类化一个字典,也是看它dealloc方法有没有调用
在ARC下,应该这些数据都会自动清理掉吧。
ARC下一样会发生因为循环引用引起的内存泄漏,还有Timer、通知之类的内存泄漏[/quote]不好意思啊,关于子类化NSMutableDictionary,我创建了一个类myNSMutableDictionary继承NSMutableDictionary,除了要在.m中实现-(void)dealloc 外,还要实现哪些函数?
Bannings 2014-09-21
  • 打赏
  • 举报
回复
引用 22 楼 nicookly 的回复:
引用 21 楼 zhangao0086 的回复:
我觉得最有可能的还是数据源刷新的时候,原有的数据没有清干净,这样吧,你的数据源_chapterList里的对象如果是自定义的对象,你就在dealloc里下断点,看数据源刷新的时候原数据有没有释放,如果是字典的话你也可以子类化一个字典,也是看它dealloc方法有没有调用
在ARC下,应该这些数据都会自动清理掉吧。
ARC下一样会发生因为循环引用引起的内存泄漏,还有Timer、通知之类的内存泄漏
nicookly 2014-09-21
  • 打赏
  • 举报
回复
引用 21 楼 zhangao0086 的回复:
我觉得最有可能的还是数据源刷新的时候,原有的数据没有清干净,这样吧,你的数据源_chapterList里的对象如果是自定义的对象,你就在dealloc里下断点,看数据源刷新的时候原数据有没有释放,如果是字典的话你也可以子类化一个字典,也是看它dealloc方法有没有调用
在ARC下,应该这些数据都会自动清理掉吧。
Bannings 2014-09-21
  • 打赏
  • 举报
回复
我觉得最有可能的还是数据源刷新的时候,原有的数据没有清干净,这样吧,你的数据源_chapterList里的对象如果是自定义的对象,你就在dealloc里下断点,看数据源刷新的时候原数据有没有释放,如果是字典的话你也可以子类化一个字典,也是看它dealloc方法有没有调用
nicookly 2014-09-21
  • 打赏
  • 举报
回复
引用 19 楼 zhangao0086 的回复:
_rootArray呢 myPlayer和它的typeDataArray 还有这个方法的实现:startParseType
-(void)startParseType:(NSString *)parentId { NSMutableString *url = [[NSMutableString alloc]initWithString:@"http:XXXXXX"]; [url appendString:parentId]; [myPlayer StartParse:url isWebXmlLink:YES]; } myPlayer和它的typeDataArray在下面: //xml文件解析部分 - (void)parserDidStartDocument:(NSXMLParser *)parser { @autoreleasepool { _disBqArray = [[NSMutableArray alloc] init]; _dataArray = [[NSMutableArray alloc] init]; _dict = [[NSMutableDictionary alloc] init]; _dataTmp = [[NSMutableString alloc] init]; _actionArray =[[NSMutableArray alloc ]init]; _titleName = [[NSMutableString alloc] init]; _color = [[NSMutableString alloc] init]; _thick = [[NSMutableString alloc] init]; _clean = [[NSMutableArray alloc] init]; _rubber = [[NSMutableArray alloc] init]; _imagePages = 0; stepTimes = 0; //type地址部分的xml数据解析 _typeDataTmp = [[NSMutableString alloc] init]; _typeDict = [[NSMutableDictionary alloc] init]; _typeDataArray = [[NSMutableArray alloc] init]; //question地址部分的xml数据 _questionDataTmp = [[NSMutableString alloc] init]; _questionDict = [[NSMutableDictionary alloc] init]; _questionDataArray = [[NSMutableArray alloc] init]; } } _rootArray的话也是点返回就把最后一个删除掉了,点cell 加入NSinteger数据
Bannings 2014-09-21
  • 打赏
  • 举报
回复
_rootArray呢 myPlayer和它的typeDataArray 还有这个方法的实现:startParseType
nicookly 2014-09-21
  • 打赏
  • 举报
回复
引用 16 楼 zhangao0086 的回复:
也是有可能的: [self startParseType:[_rootArray lastObject]]; [_rootArray removeLastObject]; [_chapterList removeAllObjects]; [_chapterList addObjectsFromArray:[myPlayer typeDataArray]]; 应该是这四句代码的缘故
额,我也觉得有可能,但是我每次都removeAllObjects 所有的object 然后才add进去,感觉应该没有问题
nicookly 2014-09-21
  • 打赏
  • 举报
回复
引用 15 楼 zhangao0086 的回复:
在Xcode里运行Analyze看看。 菜单栏-Product-Analyze
Analyze试了下,没有疑似泄露点
Bannings 2014-09-21
  • 打赏
  • 举报
回复
也是有可能的: [self startParseType:[_rootArray lastObject]]; [_rootArray removeLastObject]; [_chapterList removeAllObjects]; [_chapterList addObjectsFromArray:[myPlayer typeDataArray]]; 应该是这四句代码的缘故
Bannings 2014-09-21
  • 打赏
  • 举报
回复
在Xcode里运行Analyze看看。 菜单栏-Product-Analyze
nicookly 2014-09-21
  • 打赏
  • 举报
回复
引用 12 楼 zhangao0086 的回复:
恩,那可能是Xcode的问题,instrucments更准一些
对了,我每次刷新数据源之前都要解析网络中的xml,然后把解析到的内容复制到 nsmutablearray 类型的_chapterList数组中,有没可能是这部分问题?
nicookly 2014-09-21
  • 打赏
  • 举报
回复
引用 12 楼 zhangao0086 的回复:
恩,那可能是Xcode的问题,instrucments更准一些
但是即使是instrucments 中测试的话,反复进行同样的操作内存还是会持续增长。
Bannings 2014-09-21
  • 打赏
  • 举报
回复
恩,那可能是Xcode的问题,instrucments更准一些
nicookly 2014-09-21
  • 打赏
  • 举报
回复
引用 10 楼 zhangao0086 的回复:
instrucments显示占用的内存和Xcode显示占用的内存是一样的吗?
我看了下,不一样,instrucments 远小于xcode中的占用内存大小,如instrucments 13M开始回落到8M左右,而同样情况xcode要20M,也基本不回落。
加载更多回复(10)

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧