我正在構建一個Cocoa應用程序,並且有關於使用窗口控制器的問題。這個想法是,如果用戶從菜單欄中選擇New,則會創建一個屬於NSWindowController子類的MyWindowController實例,並顯示一個MyWindow.xib的新窗口。當窗口關閉時釋放NSWindowController
我正在處理應用程序委託中的操作。從我看到的東西后,可以做下面的事情。一旦顯示窗口,我沒有任何理由再將指針存儲到窗口控制器,並且自從我分配窗口後,我也在顯示窗口之前自動釋放它。
[[[[MyWindowController alloc] init] autorelease] showWindow:self];
由於窗口很快被釋放,窗口會短暫地顯示在屏幕上,然後消失。我發現了一個解決方案,我將窗口控制器保留在-showWindow:方法中,讓它在獲取windowWillClose通知後自行釋放。
- (IBAction)showWindow:(id)sender
{
[self retain];
[[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillCloseNotification
object:self.window
queue:nil
usingBlock:^(NSNotification *note) {
[self release];
}];
[super showWindow:sender];
}
有沒有更好的方法來做到這一點?我搜查了蘋果文檔,並沒有發現任何使用哪種做法。這聽起來像是它應該涵蓋的非常基本的東西,所以也許我只是在用錯誤的術語搜索。