----問題由自己解決,信息在我的評論更新----的dealloc在[超級的dealloc]
打了兩次電話和崩潰我有具有周期性的NSTimer視圖控制器。我所說的計時器無效當我刪除視圖控制器:
- (void)dealloc
{
NSLog(@"dealloc called");
if ([myTimer isValid]) {
[myTimer invalidate];
}
[super dealloc];
}
我發現了一個意外的行爲,該[myTimer無效]將立即打電話給我的視圖控制器的dealloc。這就是爲什麼我把isValid檢查以避免崩潰。但[超級dealloc]將被調用兩次,並崩潰應用程序。
因此,我有兩個問題:
什麼是無效的定時器的正確方法?
爲什麼計時器的無效方法調用視圖控制器的dealloc方法?
感謝
利奧
您應該在viewDidUnload下放置無效語句以避免崩潰。 –
這聽起來像是一些奇怪的行爲。是否還有其他的對象持有對你的視圖控制器的引用 - 如果沒有,有沒有可能,一旦定時器被從NSRunLoop中移除並釋放,視圖控制器就不再引用它了(所以被解除分配)? – Stuart
@studev,你是對的。我只是認爲視圖控制器被錯誤地發佈在這個代碼的一面。計時器的無效將釋放目標,但目標的dealloc不應該是呼叫。而保留計數應該從2減少到1.因爲當我安排定時器時,計時器保留了目標。 – leo