Утечка памяти в инструментах

#iphone

#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];
  

есть ли утечка в моем коде??

спасибо за ваши ответы

Ответ №1:

Попробуйте с помощью приведенного ниже

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

Ответ №2:

Просто попробуйте это

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

Комментарии:

1. В чем причина, чтобы сделать это, пожалуйста??

Ответ №3:

Я предполагаю, что вы определили этот тип свойства для anOtherNSArray :

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

свойство retain означает, что при использовании средства доступа значение будет сохранено автоматически!
использование средства доступа :

 self.anOtherNSArray = something;
  

будет делать то же самое, что не использовать средство доступа, но сохранить значение :

 anOtherNSArray = [someting retain];
  

Вы должны либо :

  • не определено свойство retain для anOtherNSArray (вместо этого используйте assign), если значение не обязательно сохранять здесь
  • не используется средство доступа (удалите «self».)
  • отпустите экземпляр, прежде чем устанавливать новое значение!

Последний вариант — самый простой и безопасный (выполнение «self.anOtherNSArray = nil ;» как указано Jhaliya, экземпляр будет выпущен и установлен в ноль) !

Прочтение этого может помочь вам немного лучше понять, что такое свойства:http://cocoacast.com/?q=node/103