2015-04-01 54 views
1

我正在創建一個應用程序,需要有一個進度窗口,其中我想爲每個正在處理的項目動態插入一個子視圖,例如Finder的複製文件面板窗口。處理完成後也可以動態刪除它。NSStackView中單個內容視圖的多個實例

我想用同樣的NSViewController視圖的所有子視圖和我使用的是NSStackView管理的意見。

但是,爲了讓子視圖保留在內存中,我必須對它們保持強有力的引用,我知道的唯一方法是爲我需要顯示的每個子視圖創建一個屬性。像這樣:

@propery (strong) NSViewController *myViewController1; 
@propery (strong) NSViewController *myViewController2; 
@propery (strong) NSViewController *myViewController3; 
@propery (strong) NSViewController *myViewController4; 
.... 

我想知道是否有更好,更動態的方式來做到這一點?或者我必須爲子視圖創建x個屬性才能知道我有足夠的實例進行分配,因爲我無法知道用戶在運行應用程序和導出項目時需要多少個進程視圖。

因此,我想動態分配每個子視圖併爲其創建一個強有力的參考。那可能嗎?還是有另一種做我想做的事情的方式?

請讓我知道如果我不清楚,我會很樂意解釋更多以獲得這個問題的幫助。

+0

如何將它們存儲在數組中? – 2015-04-01 21:13:36

+0

是的,可以這樣做,但我怎麼做,仍然保持強大的參考,所以意見不會被釋放。我可以在我的測試代碼中動態地添加和刪除儘可能多的數據,但是當試圖與視圖交互時,我會在釋放它之後發生崩潰。或者我不理解你的建議是正確的? – 2015-04-02 18:31:10

+0

數組(即'NSArray's)對其元素保持強烈的引用。你對數組保持單一的強引用,並且將視圖控制器添加到數組中(這保持對它們的強引用)。從陣列中刪除視圖控制器時,該陣列將釋放其引用。當數組被釋放時(在你釋放強引用之後,當你的對象被釋放時,如果不在之前),它也釋放它對所有元素的引用。 – 2015-04-02 19:19:28

回答

1

您可以將對視圖控制器的引用存儲在NSArray中。數組保持對它們包含的對象的強烈引用。

相關問題