У меня есть приложение, которое должно непрерывно сигнализировать слово в азбуке Морзе. Я сделал это, создав NSThread и запустив некоторый код внутри селектора с помощью цикла while. Вот код:
@implementation MorseCode
-(void)startContinuousMorseBroadcast:(NSString *)words{
if (!(threadIsOn)) {
threadIsOn = YES; s
myThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadSelector:) object:words];
[myThread start];
}
if (morseIsOn) {
morseIsOn = NO;
}
else{
morseIsOn = YES;
}
}
-(void)threadSelector:(NSString *)words{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
while (![myThread isCancelled]) {
// ///it Does some code here
} //end While
NSLog(@"Cleaning the pool");
[pool drain];
}
@end
При выходе из приложения (пользователь нажимает кнопку), в applicationDidEnterBackground выполняется следующий селектор:
-(void)cleanUpMorseObject{ //this is defined in the MorseCode class, same as threadSelector
if (threadIsOn) {
NSLog(@"cleanUpMorseObject, threadIsOn");
threadIsOn = NO;
morseIsOn = NO;
[myThread cancel];
[myThread release];
}
}
Приложение правильно реагирует на событие, я проверил с помощью nslog.
И тогда вызывается [выпуск MorseCode].
Код выглядит так:
-(void)applicationDidEnterBackground{ //this happens in the ViewController
[theMorse cleanUpMorseObject]; //theMorse is an instance of MorseCode
[theMorse release];
}
Проблема: хотя я вызываю [myThread release] , а затем [theMorse release] retainCount theMorse по-прежнему выше 0 (он не вызывает dealloc).
Инструмент «Утечки» не говорит о том, что у меня есть утечка, но если я открою и закрою приложение примерно 10 раз, то Iphone будет сброшен. Также в отладчике в конце концов я вижу предупреждение о получении памяти. Level = 2” .
Кроме того, я никогда не вижу NSLog до слива бассейна…
Приложение не работает в фоновом режиме.
Есть идеи? Спасибо