2009-07-28 58 views
0

有沒有什麼方法可以檢測NSView何時解除分配?檢測NSView何時解除分配

原因是,我有一些簡單的委託(例如NSTextField委託處理 - 控制:textView:doCommandBySelector:允許輸入返回/製表鍵)。我想把這個委託對象放在筆尖上,連接NSTextField的委託連接並使其工作。

它可以工作,但即使在它所鏈接的NSTextField被釋放之後,委託也不會被釋放,所以委託對象會泄漏。

我想委託對象能夠檢測到NSTextField何時被釋放,但我想不出任何方式來做到這一點,這讓我不得不存儲一個單獨的鏈接到委託對象從一些其他控制器中手動釋放它在某個非常不理想的地方。有任何想法嗎?

回答

1

我以前對此有很好的看法,並且似乎沒有任何方法可以觀察何時釋放對象。我已經看到了一種在弱指針類中做到這一點的方法,但它涉及到isa混亂,可能會變得討厭。以下是網站:http://www.cocoadev.com/index.pl?WeakPointers

當nib文件的所有者被釋放時,應該釋放從nib文件創建的對象,除非它們保留在別處。例如,當NSWindowController被釋放時,它將釋放加載nib時創建的所有對象。如果您的委託對象沒有被釋放,也許是因爲它們保留在別處,或者有一個保留週期。

+0

問題是我不想向每個控制器添加代碼以瞭解和刪除此NSTextField特定的委託,否則它將與之沒有任何交互。我的解決方案是使用帶有5(ick)IBOutlet ivars releaseOnDealloc1..5的超類控制器。在超類中,dealloc調用每個ivars上的發佈。然後在界面構建器中,對於每個視圖,我只是將各個對象連接到各個releaseOnDealloc插座,以便在適當的時候發佈它們。有點難看,但有效,只需最少的代碼/努力。 – 2009-08-04 03:02:55