我有一個應用程序需要用莫爾斯電碼連續發信號。我通過創建一個NSThread並使用「while循環」在選擇器內運行一些代碼來實現這一點。下面是代碼:使用NSThread進行內存管理
@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];
}
}
應用正確響應的情況下,I」已經檢查過nslog。 然後調用[MorseCode release]。 的代碼看起來是這樣的:
-(void)applicationDidEnterBackground{ //this happens in the ViewController
[theMorse cleanUpMorseObject]; //theMorse is an instance of MorseCode
[theMorse release];
}
的問題:雖然我叫[MyThread的發佈]然後[theMorse發行]的theMorse的retainCount仍高於0(它不叫的dealloc)。
泄漏儀器並沒有說我有泄漏,但如果我打開和關閉應用程序,最終Iphone重置10次。同樣在調試器中,我最終看到「收到的內存警告。級= 2」 。
而且我從來沒有看到的NSLog池排水之前...
的應用程序不會在後臺運行。 任何想法?謝謝
謝謝你的第一和第二個信息,這是很好的知道。我知道什麼是「取消」。我的代碼用while檢查![myThread isCancelled] –