仪器内存泄漏

时间:2011-05-13 11:31:23

标签: iphone

我在我的解析器中:

+(NSArray *)parseMethode:(NSData *)xmlData  {
...
 return [myNSArray autorelease];
}

在另一个控制器中我已经这样做了:

@synthesize anOtherNSMutableArray;

- (void)requestFinished:(ASIHTTPRequest *)request
{

NSData *responseData = [self.currentRequest responseData];


self.anOtherNSArray = [MyClassParsers parseMethode:reponseData];
...

}

当我午餐时,它会检测到我的漏水:

self.anOtherNSArray = [MyClassParsers parseMethode:reponseData];

我的代码是否有漏洞?

感谢您的回答

3 个答案:

答案 0 :(得分:1)

尝试使用以下

self.anOtherNSArray = nil ;
self.anOtherNSArray = [MyClassParsers parseMethode:reponseData];

答案 1 :(得分:0)

试试这个

 NSData *responseData = [self.currentRequest responseData] autorelease];

答案 2 :(得分:0)

我猜你已经为anOtherNSArray定义了这种属性:

@property (...,retain) NSArray *anOtherNSArray;

retain属性意味着使用访问者将自动保留值! 使用访问者:

self.anOtherNSArray = something;

将不使用访问者但保留值:

anOtherNSArray = [someting retain];

你应该:

  • 如果不必在此处保留值,则不定义anOtherNSArray的retain属性(改为使用assign)
  • 不使用访问者(删除“自我”。)
  • 在设置新值之前释放实例!

最后一个选项是更容易和最安全的选择(按照Jhaliya所说的“self.anOtherNSArray = nil;”将释放实例并将其设置为nil)!

阅读可能有助于您更多地了解属性:http://cocoacast.com/?q=node/103