2012-07-19 321 views
1

我有一個視圖可以在我的應用程序的不同屏幕上顯示。我不想分配和初始化每個屏幕的視圖。我認爲這可以通過兩種方法來完成:我應該爲我的視圖控制器使用singelton嗎?

1)初始化App Delegate中的視圖並從所有屏幕訪問相同視圖。 (注意:我不想添加窗口上的觀點,因爲我的應用程序只支持橫向模式,這將導致大量的意大利麪條代碼管理視圖方向。)

2)使視圖單代替

現在,關於Singleton模式一般是好還是壞,一直存在很多爭論。另外,我知道使用單身視圖控制器被認爲是bad idea

有沒有更好的方法來實現這個?

回答

1

使用單例並不是一個壞主意,它實際上是一個堅實的模式,允許在整個應用程序生命週期中存儲快速訪問的數據。 NSUserDefaults,NSFileManager,NSNotificationCenter和許多其他Apple默認類使用單例模式。如果你的視圖佔用太多內存(例如它有很多沉重的圖形資源),那麼你應該有一個類,每次調用它時創建該視圖並將其加載到內存一段時間,即視圖用於英寸如果您的視圖重量輕,您應該靜態創建它,並保持它在整個應用程序的生命週期中使用單例類。

0

使用單例或使用您的應用程序委託的屬性是完成同樣事情的等效方法。人們也可以使用傳遞給所有「利益相關方」的共同結構。

您選擇哪一個取決於您 - 「理想」選擇取決於具體情況。

然而,要警惕的是,最終會導致數十個或數百個單身人士 - 這通常表明您的設計沒有經過深思熟慮。

0

單身是現代的全局變量,所以我儘量避免它們,除非絕對必要。使用Apple的低內存全局變量導致Carbon移植時出現各種問題。

如果您要維護庫,請注意每個庫都會有一個單例實例,因此您需要小心訪問它們的人。我在Loki單例實現(C++)中遇到了這個問題,儘管Objective-C單例會有相同的問題。

0

我有一個視圖可以在我的應用程序的不同屏幕上顯示。 I 不想分配並初始化來自每個屏幕的視圖。

爲什麼難道你不想創建視圖,因爲你需要它嗎?視圖使用大量內存:

  • 在非視網膜iPhone上的半屏視圖(240 * 320)僅需要300KB的像素。

  • 視網膜顯示屏上的相同視圖需要1個。2MB

僅僅因爲這個原因,只在你真正需要它的時候分配你的通用視圖似乎是一個非常好的主意。沒有顯示時掛在視圖上沒有什麼可以獲得。

相關問題