Хотя это, кажется, не создает проблемы на симуляторе, использование performSelectorInBackground
на устройстве вызывает утечки памяти. Или, по крайней мере, на это указывают инструменты. Глядя на код, я не имею ни малейшего понятия, в чем причина.
Я пытался свести уязвимый код к минимуму, но все же странно, что инструменты продолжают показывать утечку каждый раз, когда выполняется этот фрагмент кода.
Что-нибудь необычное здесь происходит?
//In viewcontrollerA:
-(void)mainLoop
{
[self.viewControllerB performSelectorInBackground:@selector(calculateTotals) withObject:nil];
//This gives the same problem
//[NSThread detachNewThreadSelector:@selector(calculateTotals) toTarget:self.viewControllerB withObject:nil];
//UI stuff ...
}
//viewControllerB:
-(void)calculateTotals
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//Heavy calculations ...
[pool release];
}
Edit:
Я все еще смотрю на это, и кажется, что утечка вызвана тем фактом, что где-то в стеке [NSThread start] никогда не следует [NSThread exit]. Таким образом, создается впечатление, что иногда существует поток, который продолжает работать, не прерывая его.
Теперь мой вопрос: могу ли я что-нибудь сделать, чтобы покончить с этими «висящими» угрозами вручную?