Я пытаюсь запустить таймер в фоновом режиме своего приложения, я интенсивно использую таймер в своем приложении и предпочитаю запускать его в фоновом режиме, однако я получаю утечки памяти при попытке освободить NSAoutreleasePool.Мой класс Timer является синглтоном, поэтому, если я запускаю новый таймер, старый таймер удаляется.
+ (void)timerThread{
timerThread = [[NSThread alloc] initWithTarget:self selector:@selector(startTimerThread) object:nil]; //Create a new thread
[timerThread start]; //start the thread
}
//the thread starts by sending this message
+ (void) startTimerThread
{
timerNSPool = [[NSAutoreleasePool alloc] init];
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(startTime:) userInfo:nil repeats:YES];
//timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(startTime:) userInfo:nil repeats:YES];
//[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
[runLoop run];
[timerNSPool release];
}
+ (void)startTime:(NSTimer *)theTimer{
if(timeDuration > 1)
timeLabel.text = [NSString stringWithFormat:@"%d",--timeDuration];
else{
[self stopTimer];
[delegate timeIsUp];
}
}
+ (void) stopTimer{
if(timer != nil)
{
[timerThread release];
[timeLabel release];
[timer invalidate];
timer = nil;
}
}
У меня никогда не было проблем с запуском NSTimer в главном потоке runLoop с автозагрузкой приложения.Я получаю утечку при [выпуске timerNSPool];GeneralBlock-16 Malloc WebCore WKSetCurrentGraphicsContext
Причиной утечки является обновление пользовательского интерфейса из вторичного потока:
timeLabel.text = [NSString stringWithFormat:@"%d",--timeDuration];
Однако я добавил другой метод updateTextLbl, затем я вызываю его с помощью этого
[self performSelectorOnMainThread:@selector(updateTextLbl) withObject:nil waitUntilDone:YES];
в основном потоке.У меня не было никаких утечек вообще, но это побьет цель иметь вторые темы.
Это мой первый пост, и я ценю любую помощь Спасибо ... заранее ....