我在[泳池发布]发现泄漏;
我的代码是:
#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方法中。
我该如何解决这个问题。
任何人的帮助将不胜感激。
谢谢你, Monish。
答案 0 :(得分:1)
在退出当前线程之前尝试释放池吗?
...
[pool release];
[NSThread exit];
编辑:来自NSThread -exit参考:
应避免调用此方法 因为它没有给你的线程 有机会清理它的任何资源 在执行期间分配。
你真的需要把这个功能称为BTW吗?
答案 1 :(得分:0)
除了弗拉基米尔的回答指出自动释放池泄漏,artName和& artistList在将它们设置为新值(否则旧对象被泄露)之前缺少release
消息,之后发送retain
消息(因此当自动释放池耗尽时新对象会消失)
[artistsList release];
artistsList = [[appDelegate doSearch:artistName] retain];