我有一個基於文檔的Cocoa應用程序,它的子類NSDocument
作爲MyDocument
。每個MyDocument
管理一個單獨的後臺進程(作爲NSTask
)。我想確保NSTask
在其相應的MyDocument
關閉時或整個應用程序退出時終止。NSDocument子類,稱爲「關閉」方法兩次
對於後者,我使文檔觀察NSApplicationWillTerminateNotification.
對於前者,我重寫close
方法:
-(void)close {
// Cleanup code here
[super close];
}
(順便說一句,我不能把清理代碼在dealloc
方法,因爲該項目是GC 。「d)
問題是這樣的:如果我打開一個MyDocument
,使未保存的更改,然後按CMD-Q中,close
方法被稱爲兩次。從調試器,調用鏈是: [MyDocument close]
電話[NSDocument close]
,這就要求[NSWindowController _windowDidClose]
,再次呼籲[MyDocument close]
。 (在該通話之後,應用程序退出)。
這是預期的行爲?如果是這樣,是否有更好的方式來發布文檔特定的資源?或者我應該讓close
安全地運行多次?
有趣。這種行爲(不止一次接收'-close')似乎沒有記錄。我認爲你建議讓'-close'安全地運行多次是很好的選擇。 – 2011-04-12 05:00:05
其實,你不是第一個想到的是:http://www.cocoabuilder.com/archive/cocoa/240166-nsdocument-close-method-calls-itself.html – 2011-04-12 05:12:09