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

Jul*_*les 0 iphone cocoa-touch objective-c ios

当我试图重置一个表格视图时,我得到了内存泄漏,我以为我可以在之前发布,但这没有用.

我需要做什么?

-(void) resetTable{

    recordOffset = 10;
    rOFactor = 0;
    booShowMoreCell = false; 
    self.transactionsArray = [[NSMutableArray alloc] init]; // leak here
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*an. 5

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

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

所以

//   \/--- retain count = 2               \/-- retain count = 1
self.transactionsArray = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

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

self.transactionsArray = [[[NSMutableArray alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)

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

self.transactionsArray = [NSMutableArray array];
Run Code Online (Sandbox Code Playgroud)