2011-05-13 214 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