2011-05-13 279 views
0

我在我的解析器:内存泄漏

+(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]; 

在我的代码中是否有泄漏?

感谢您的回答

回答

1

下面

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

它解决了我的泄漏问题。但我不明白为什么? – izan 2011-05-13 11:54:05

0

刚刚尝试这一点

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

什么是做到这一点,请的原因? – izan 2011-05-13 11:37:20

+0

你试过了吗? – 2011-05-13 11:38:39

0

我想您已经定义这种属性anOtherNSArray尝试:

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

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

self.anOtherNSArray = something; 

将这样做比不使用的访问,但保留值:

anOtherNSArray = [someting retain]; 

您应该:

  • 没有定义anOtherNSArray的保留属性(使用assign来代替)如果这个值不必在这里保留
  • 不使用访问器(remov e“自我”)
  • 在设置新值之前释放实例!

最后一个选项是最简单和最安全的一个(按照Jhaliya的说法,“self.anOtherNSArray = nil;”将释放实例并将其设置为零)!

阅读,可以帮助你了解一点点是什么性质:http://cocoacast.com/?q=node/103