Утечка памяти при пуле авто-релиза в Iphone SDK - PullRequest
0 голосов
/ 25 марта 2010

Я получаю утечку при [выпуске пула];

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

#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 {
}
}

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

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

Любая помощь будет высоко ценится.

Спасибо, Мониш.

Ответы [ 2 ]

1 голос
/ 25 марта 2010

Попробовать освободить пул перед выходом из текущего потока?

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

Редактировать: Из NSThread - выход из ссылки:

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

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

0 голосов
/ 25 марта 2010

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

[artistsList release];
artistsList = [[appDelegate doSearch:artistName] retain];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...