2017-07-18 44 views
1

我有一個應用程序,它有一個主頁面,一個房間頁面,然後是房間頁面的子房間。使用靜態變量與通過視圖控制器? iOS

要知道在詳細信息頁面上顯示的內容,詳細信息頁面需要主頁面中的字符串值,並且在子房間中需要房間頁面中的房間類別對象。

我一直只設置在我的房間級的這些靜態變量,所以當我需要字符串或對象我會做

selectedRoomname = Room.selectedName 
selectedInstance = Room.selectedInstance 

這將是非常可能的是傳遞這些變量與segues或使用delegegates,但有沒有任何理由不繼續我在做什麼?考慮到它只有兩個變量,我無法想象會對內存使用產生很大的影響。使用靜態變量可以走多遠,是否有限制?如果我需要在幾乎每個視圖控制器上訪問變量(例如用戶的用戶名,配置文件圖像等),那麼在創建靜態User類對象時是否存在任何問題?

tl; dr,它使用靜態變量有多強烈,是否存在濫用它們的事情?

回答

2

實際的原因是它將您限制爲Room的一個獨特實例。如果您想要顯示超過1個房間,則必須重新設計它。這種設計是脆弱和不靈活的。

更哲學的原因是它打破了OOP。一個班級不應該跟蹤自己,這是它的父母的工作(可能的例外情況是單身人士,但這是一個其他可能的蠕蟲)。它也使得子類變得棘手。 LaundryRoom類應該有自己的靜態變量嗎? LaundryRoom課也應該用Room的靜態變量嗎?這本質上是令人困惑的。

我傾向於解決這些問題的方式是從IRL的角度思考它。所有房間都有相同的名字嗎?只能有1間房間有人居住?如果這些屬性對於一個實例而言並不是個體,而應該是一個實例變量。

+0

解釋這一切的絕妙方式非常有意義。非常感謝你。 – user6820041

+0

沒問題。祝你好運! – PeejWeej

相關問題