PerformSelectorInBackground утечка на устройстве - PullRequest
3 голосов
/ 24 мая 2010

Хотя это, кажется, не создает проблемы на симуляторе, использование 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]. Таким образом, создается впечатление, что иногда существует поток, который продолжает работать, не прерывая его. Теперь мой вопрос: могу ли я что-нибудь сделать, чтобы покончить с этими «висящими» угрозами вручную?

1 Ответ

0 голосов
/ 25 мая 2010

Возможно, одна из ваших тем создает исключение?Об исключениях в потоках не сообщается в консоли отладки, вы должны перехватить исключение в потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...