可以說,我顯示像這樣的窗口:負責釋放NSWindowController對象的是什麼?
[[TBAddTaskWindowController新]的ShowWindow:自];
TBAddTaskWindowController對象在哪裏被釋放?是windowWillClose中調用[self release]的通用解決方案嗎?
讓任何其他對象「擁有」窗口感覺不對,因爲它意味着直到用戶關閉它。
可以說,我顯示像這樣的窗口:負責釋放NSWindowController對象的是什麼?
[[TBAddTaskWindowController新]的ShowWindow:自];
TBAddTaskWindowController對象在哪裏被釋放?是windowWillClose中調用[self release]的通用解決方案嗎?
讓任何其他對象「擁有」窗口感覺不對,因爲它意味着直到用戶關閉它。
通過向該類發送new
消息來實例化窗口控制器的相同代碼,就好像它已通過alloc
和init
消息所做的那樣。
是的,常見的方式做釋放窗口控制器是:
- (void)windowWillClose:(NSNotification *)notification
{
[self autorelease];
}
窗口控制器需要,只要僅作爲窗口周圍住,所以自動釋放它時,窗口消失熟能生巧感。
記得去除其他觀察者等。
對於ARC,你需要保留一個強大的參考窗口控制,同時在窗口打開,然後在窗口關閉刪除。
要做到這一點,我添加兩種方法控制的窗口上的類別:
pnl_addWindowController
—通過當窗口被第一次打開pnl_removeWindowController
—窗口控制器從windowWillClose
該類別維護活動窗口控制器的全局NSMutableSet
。代碼實質上只是[gWindowControllers addObject:self]
和[gWindowControllers removeAllObjects]
,有一些惰性創建的NSMutableSet和一些鎖定。
因此,就我而言,應用程序委託人必須觀察窗口關閉,然後釋放窗口控制器? – 2009-06-23 10:27:59
是的。我不確定你會在應用程序終止時看到關閉窗口的通知,但是 - 我正在撰寫一個與此有關的博客文章。 – 2009-06-23 16:02:51