我有一個uiviewcontroller
實例,當我釋放它時,它的dealloc方法被調用。由於uview控制器[super dealloc]造成的內存崩潰
我已經發布了一些在dealloc方法中的對象uiviewcontroller
。
如果我評論[super dealloc]
該應用程序工作正常,但如果不是它崩潰。
我認爲我在這個方法中使用的版本沒有問題,但是如果我做的是[super dealloc]
它會崩潰。
任何人都可以幫助我嗎?
我有一個uiviewcontroller
實例,當我釋放它時,它的dealloc方法被調用。由於uview控制器[super dealloc]造成的內存崩潰
我已經發布了一些在dealloc方法中的對象uiviewcontroller
。
如果我評論[super dealloc]
該應用程序工作正常,但如果不是它崩潰。
我認爲我在這個方法中使用的版本沒有問題,但是如果我做的是[super dealloc]
它會崩潰。
任何人都可以幫助我嗎?
很難從您的文章中分辨出沒有更多信息,但您的dealloc方法是這樣嗎?
- (void)dealloc {
[super dealloc];
self.someProperty = nil;
}
因爲如果是這樣,那麼您在釋放實例上調用setter方法。你應該總是調用[超級的dealloc]最後:
- (void)dealloc {
self.someProperty = nil;
[super dealloc];
}
不知道有沒有什麼幫助。嘗試發佈你的dealloc方法,如果不是的話。很難在黑暗中排除故障。
你不應該在dealloc中訪問這樣的屬性 - 它被認爲是不好的做法,因爲你正在重新進入正在被釋放的對象。你應該這樣做:[someProperty發佈],someProperty =零; – 2011-05-16 08:32:40
無法在沒有更多信息的情況下幫助您。你描述的代碼非常好。問題出在你的應用的其他部分。
您可能在釋放它之後訪問視圖控制器,所以問題不在於[super dealloc]
,而是訪問視圖控制器的應用程序中的任何其他位置。
這也是我的第一個想法。當不調用超級dealloc時,你的對象不會被釋放,其他地方的壞代碼仍然可以工作。當您取消超級通話的註釋時,錯誤會再次出現。 – 2010-12-02 05:26:47
也許你是在錯誤的地方釋放控制器。這可能是爲什麼你的ViewController.m中的[超級dealloc]崩潰的原因
你不應該調用[viewController release],直到你想要控制器死掉。例如,如果你的應用程序只有一個viewcontroller,你就不能在應用程序結束之前釋放它。這是因爲該控制器需要始終保持活躍狀態來控制視圖。如果您在ApplicationDelegate這樣的事情有,它會崩潰:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
UIViewController *controller = [[UIViewController alloc] init];
[window addSubview:controller.view];
[controller release]; //this will crash
}
相反的,你應該把你的ViewController在頭文件(.h)中,並在dealloc方法釋放:
- (void)dealloc {
[controller release];
[window release];
[super dealloc];
}
我希望這有助於。
你能從調試器控制檯發佈錯誤消息嗎? – Morion 2009-10-30 12:13:30
你可以發佈你的dealloc方法包含[super dealloc]嗎? – richleland 2009-10-30 12:24:35