对象泄漏:以后在此执行路径中未引用已分配的对象,并且保留计数为+1

时间:2012-03-13 20:46:39

标签: iphone objective-c ios cocoa-touch

当我试图重置表格视图时,我发现了内存泄漏,我以为我之前可以放置发布,但这没有帮助。

我需要在这做什么?

-(void) resetTable{

    recordOffset = 10;
    rOFactor = 0;
    booShowMoreCell = false; 
    self.transactionsArray = [[NSMutableArray alloc] init]; // leak here
}

3 个答案:

答案 0 :(得分:5)

假设transactionsArray是一个保留属性,那么你遇到的问题是NSMutableArray被保留了两次。

设置保留属性时,它会释放旧值,并保留新(传入)值。 alloc方法也保留了对象。

所以

//   \/--- retain count = 2               \/-- retain count = 1
self.transactionsArray = [[NSMutableArray alloc] init];

解决此问题的最简单方法是自动释放NSMutableArray:

self.transactionsArray = [[[NSMutableArray alloc] init] autorelease];

以上一行有一种方便的方法:

self.transactionsArray = [NSMutableArray array];

答案 1 :(得分:0)

由于我无法在此代码中看到[tableView release] - 调用,这就是缺少的内容 - 在分配新代码之前,您不会释放tableView。这意味着您要添加保留计数,而不先删除一个。添加release将解决泄漏问题。

答案 2 :(得分:0)

第一眼我会说你只是用一个新对象的引用覆盖指针并忘记指向尚未发布的对象的旧引用。只要您不使用ARC,就应该使用

[self.transactionsArray release]; // Be sure it was alloced before
self.transactionsArray = [[NSMutableArray alloc] init];