2010-03-25 3 views
0

Я получаю утечку в [пул релиз];Утечка памяти в Autorelease pool in Iphone sdk

Мой код здесь:

#pragma mark UISearchBarDelegate delegate methods 


- (void)performSearch:(UISearchBar *)aSearchBar 
{ 

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

artistName= [aSearchBar.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
if ([artistName length] > 0) 
{ 

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

    LyricsAppDelegate* appDelegate = (LyricsAppDelegate*) [ [UIApplication sharedApplication] delegate]; 
    artistsList=[appDelegate doSearch:artistName ]; 
    [theTableView reloadData]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 


    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 


    [aSearchBar resignFirstResponder]; 
} 
else 
{ 
    [aSearchBar resignFirstResponder]; 
} 
[NSThread exit]; 
[pool release]; 

} 

- (void)searchBarSearchButtonClicked:(UISearchBar *)aSearchBar 
{ 
@try { 
    [NSThread detachNewThreadSelector:@selector(performSearch:) toTarget:self withObject:aSearchBar]; 
    [aSearchBar resignFirstResponder]; 
} 
@catch (NSException * e) { 
    NSLog(@"\n caught an exception"); 
} 
@finally { 
} 
} 

Здесь я получаю утечку в [выпуска пула]; в методе performSearch.

Как я могу это решить.

Любая помощь будет очень признательна.

Thank you, Monish.

ответ

1

Попробуйте освободить бассейн перед тем, как выйти из текущей нити?

... 
[pool release]; 
[NSThread exit]; 

Edit: Из NSThread -exit ссылки:

Вызов этого метода следует избегать , поскольку это не дает ваш поток в шанс очистить любые ресурсы, выделенные во время его выполнение.

Вам действительно нужно называть эту функцию BTW?

+0

да я попытался, как до ур предложения, но теперь она показывает утечку на линии: artistName = [aSearchBar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; – monish

+0

Когда я снял поток, поиск очень медленный, на самом деле я получаю данные от синтаксического анализатора. – monish

+0

Я имею в виду, почему вам нужно выйти из потока, используя функцию [NSThread exit]? Вы пытались просто удалить вызов [NSThread exit]? – Vladimir

0

В дополнение к ответу Владимира указывая на утечку autorelease бассейн, как artistName & artistList отсутствующим release сообщение, прежде чем установить их на новое значение (в противном случае старый объект утечка), и retain сообщение после этого (так новый объект застревает, когда пул авторезистов сливается).

[artistsList release]; 
artistsList = [[appDelegate doSearch:artistName] retain]; 
+0

очень благодарен Владимиру и заработал его отлично, я полностью удалил нить из своего кода. – monish

Смежные вопросы