2016-01-13 120 views
0

我在理解viewcontroller堆棧時遇到了一些嚴重的問題。 我的應用何時使用堆棧來保存以前的視圖控制器?只有當我使用導航視圖控制器或任何時候我使用普通視圖控制器並在它們之間進行模式切換?Viewcontroller堆棧理解問題

所以我只是想知道,如果我使用某種鏈式例程,例如從vc 1到vc 2以及從vc 2回到vc 1.沒有導航控制器,只是模態segues,沒有展開。 我的應用程序是否因爲堆棧(每次我都會增長)會出現性能問題,或者它沒有任何區別?

---- updated

所以基本上這是我的問題。如果我經歷了應用程序的例行程序,那麼每次我進行轉換時,視圖都會堆疊起來。

enter image description here

回答

2

UINavigationController將保留你推到它的任何控制器的導航堆棧,直到你突然回來了。

任何UIViewController將保留一個模態地呈現的控制器,直到該子控制器被解僱。

在任何情況下,每個控制器都會至少消耗一些內存,直到您將其移除。其結構不斷擴大控制器的堆棧應用很可能會遇到的一些問題,包括:

  1. 你最終會耗盡內存,速度有多快取決於每個控制器使用的內存。
  2. 如果後臺的許多控制器對同一事件作出反應,您可能會看到意想不到的副作用。
  3. 如果用戶在控制器「A」的實例中更改狀態,將控制器「B」的實例推到其頂部,然後「返回」添加到頂部的第二個「A」實例,則用戶可能會感到困惑的狀態。由於他們正在查看新的控制器並查看任何選擇,滾動位置,用戶輸入或其他狀態可能會丟失。
  4. 包括你在內的開發人員可能會對此應用感到恐懼。

我懷疑,如果您查看控制器管理與您呈現給用戶的任何視覺隱喻匹配,每個人都會有更好的體驗。

+0

在這種情況下,我將viewcontroller的第二個實例添加到另一個實例嗎?就在我使用「推」或甚至當我使用「模態」? – Tobias

+0

@Tobias中有視圖控制器容器,這意味着一個UIViewController可以添加一個子視圖控制器。所以父視圖控制器可以管理許多子視圖控制器。 – Wingzero