我的代碼的某處需要從主窗口創建多個窗口,每個窗口都以特定的配置運行,但同一控制器對象的所有實例都運行。字典的內存管理/ GCC可能的錯誤解釋?
我還需要保留一個打開的窗口列表,所以無論何時我打開一個窗口,我將它的實例存儲在一個字典中,當窗口關閉時,我發送一個通知給主窗口,該窗口觸發一個方法,然後刪除從字典中的特定窗口。
我通過創建其控制器對象的實例,然後在其上調用[showWindow:self]來創建窗口。然後,我將窗口存儲在字典中並退出該方法。
我的問題是,我既沒有釋放也沒有自動釋放新創建的對象,因爲當窗口從字典中刪除時應該這樣做(對吧?)。如果我在釋放或自動釋放該對象後,將其存儲在字典中後,當我嘗試從字典中刪除該對象時,將會出現各種錯誤。
1)難道這是Xcode中的一個簡單的錯誤,它不會注意到存儲在字典中的實例嗎?
2)無論如何,爲什麼autorelease銷燬我的窗口,如果字典存儲對它的引用?
[更新] 代碼如下
CHPostgreSQLMainController *pgMainController = [[CHPostgreSQLMainController alloc]initWithConnectionSettings:(CHPostgreSQLSettingsModel *)entityFromArray error:&error];
// Only display the window if the connection was successful.
if (pgMainController) {
[pgMainController showWindow:self];
// Register the window we've opened on the list of open windows
[listOpenWindows setObject:pgMainController forKey:[entityFromArray connectionName]];
} else {
//call NSAlert
}
「我通過創建其控制器對象的實例來創建窗口......」這是您正在討論的NSWindowController嗎?如果是這樣,你用它做什麼? – 2010-01-07 23:00:28
我顯示窗口並將對控制器的引用存儲在字典中。 – ruipacheco 2010-01-08 15:23:13