2016-03-08 75 views
1

我對Windows和視圖控制器的所有權及其發佈時間有疑問。我創建了一個測試項目,並且只加了一行代碼到NSViewController:NSViewController未發佈

deinit { print("ViewController Dismissed.") } 

爲什麼不叫這個,當我關閉窗口?我在Instruments中進行了分析,並且沒有任何內存泄漏,但仍然存在對ViewController的引用。

此外,我嘗試NSWindow上的「釋放時關閉」選項,仍然沒有骰子。任何人都可以幫助理解這一點?謝謝!!

Screenshot from Instruments

回答

1

我會簡單地把這個作爲一個評論,但我沒有足夠的聲譽:

莫不是在您的視圖控制器的關閉是保持強引用您的看法控制器或控制器中的某個對象?這是保留週期可以創建的一種方式。如果是這樣,我會認爲它會出現在樂器中,但這只是一個想法。

另外,您的視圖控制器是任何一種較大的導航系統的一部分,例如標籤欄控制器?這可能是一個因素。我不確定。

+0

它不是任何導航系統的一部分。不包含任何關閉。就像我在帖子中所說的那樣,我使用了默認項目,並且只添加了一條deinit代碼行。 – JoeBayLD

0

因爲我知道你的運行應用程序總是有一個窗口實例的強引用,而窗口實例又引用了視圖控制器。如果在關閉窗口後轉到Debug View層次結構,那麼您仍然可以在那裏看到它。如果您將故事板入口點移至故事板中的該窗口,則根本沒有該窗口。

+0

沒錯。嗯,我想我想以某種方式釋放視圖控制器,因爲它爲其他對象保留了很多引用和內存(在我的實際項目中,而不是測試中)。任何想法如何? – JoeBayLD

+0

補充一點。我確實看過Debug View Hierarchy,窗口仍然存在,並且正在工作。試圖擺脫它..謝謝 – JoeBayLD