Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 对象泄漏:分配的对象稍后在此执行路径中未被引用,其保留计数为+;1._Iphone_Objective C_Ios_Cocoa Touch - Fatal编程技术网

Iphone 对象泄漏:分配的对象稍后在此执行路径中未被引用,其保留计数为+;1.

Iphone 对象泄漏:分配的对象稍后在此执行路径中未被引用,其保留计数为+;1.,iphone,objective-c,ios,cocoa-touch,Iphone,Objective C,Ios,Cocoa Touch,当我试图重置一个表视图时,我遇到了内存泄漏,我想我可以在之前发布,但这没有帮助 我需要在这里做什么 -(void) resetTable{ recordOffset = 10; rOFactor = 0; booShowMoreCell = false; self.transactionsArray = [[NSMutableArray alloc] init]; // leak here } 由于我看不到[tableView release]-调用此代码,

当我试图重置一个表视图时,我遇到了内存泄漏,我想我可以在之前发布,但这没有帮助

我需要在这里做什么

-(void) resetTable{

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

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

因为我看不到
[tableView release]
-调用此代码,这就是缺少的内容-在分配新的
tableView之前,您不会释放
tableView
。这意味着您要添加一个保留计数,而不是先删除一个。添加
release
将修复漏洞。

乍一看,我会说您只是用一个指向新对象的引用覆盖指针,而忘记了指向尚未释放的对象的旧引用。只要不使用ARC,就应该使用

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

乍一看,我会说,你只是用一个指向新对象的引用覆盖指针,而忘记了指向一个尚未释放的对象的旧引用。只要不使用ARC,就应该使用

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

假设TransactionArray是一个保留属性,您遇到的问题是NSMutableArray被保留了两次

设置保留特性时,将释放旧值,并保留新(传入)值。alloc方法还保留该对象

所以

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

self.transactionsArray = [[[NSMutableArray alloc] init] autorelease];
有一个方便的方法用于上述行:

self.transactionsArray = [NSMutableArray array];

假设TransactionArray是一个保留属性,您遇到的问题是NSMutableArray被保留了两次

设置保留特性时,将释放旧值,并保留新(传入)值。alloc方法还保留该对象

所以

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

self.transactionsArray = [[[NSMutableArray alloc] init] autorelease];
有一个方便的方法用于上述行:

self.transactionsArray = [NSMutableArray array];

TransactionArray是保留属性吗?解决方案?使用圆弧。这是未来的发展方向,我在使用它时绝对没有内存泄漏。TransactionArray是保留属性吗?解决方案?使用圆弧。这是未来的方式,我在使用它时绝对没有内存泄漏。假设该属性是保留属性,则合成setter将负责释放旧值。假设该属性是保留属性,则合成setter将负责释放旧值。