[英]Storyboard segues and receiving memory warning
我正在使用基於iOS 9的SDK開發應用程序,這是我第一次使用Storyboard,我有20個視圖控制器,每個場景都有“前進/后退”按鈕。 我有一個很大的問題,前進! 如果我從場景1移至例如場景15,則收到內存警告,然后應用程序崩潰。 我已經搜索過了,似乎有一種方法叫做unwind segue
但是看來這是回去的方法! 這有點像dissMiss
方法。
我在Interface Builder中用線連接每個場景:
這是segue的設置:
如果您能幫助我,我將不勝感激。
編輯:
我試圖以編程方式呈現一個視圖控制器,但是結果是一樣的! 。
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
WhatIsDino *vc = (WhatIsDino*)[mainStoryboard instantiateViewControllerWithIdentifier:@"WID"];
[self presentViewController:vc animated:YES completion:nil];
似乎這是錯誤方法的問題,而不是情節提要。
讓我猜想,因為在情節rootViewController
之前,您一旦點擊箭頭按鈕就曾經將應用程序的rootViewController
更改為下一屏/上一屏。 因此,一旦您設置了新的rootViewController
,就會釋放先前的屏幕並從內存中將其rootViewController
。
現在,您將以模態形式呈現每個下一個視圖控制器,這涉及創建新的UIWindow
並加載屏幕的所有層次結構, 並將上一個屏幕保持在新的視圖之下,以便它可以容納內存,從而避免內存崩潰。
好吧,您也可以使用情節rootViewController
進行rootViewController
方法,因為這只是開發時管理屏幕的另一種方法。 情節提要提供其他功能,例如segues,靜態表格視圖單元格,常規色澤顏色等。 [UIStoryboard -instantiateViewControllerWithIdentifier:]
是您可能會發現有趣的方法。
但我建議您檢查一下UIPageViewController
,它就像屏幕的容器一樣。 不幸的是,它不能讓場景使用場景(由於場景的特殊工作方式),因此無論如何您都必須使用-instantiateViewControllerWithIdentifier:
方法。 您可以像以前使用rootViewController
一樣對待UIPageViewController
內部視圖控制器。
您也可以導航而無需猜測,而且我認為這很簡單。
如果要從Class1導航到Class 2,請按照下列步驟操作。
1)在第1類中,導入第2類。
2)在操作按鈕中,編寫此代碼。
Class2 * next = [self.storyboard InstantiateViewControllerWithIdentifier:@“ Class2標識符名稱”]; [self.navigationController pushViewController:next animation:YES];
不要忘記在故事板的特定類的屬性檢查器中提供“ Storyboard ID”的標識符名稱。
無需添加Segue,您的情節提要看上去很干凈。
問題是您要在具有模態表示的視圖控制器之后添加視圖控制器。 這導致每個視圖控制器被添加到前一個視圖控制器的上方,並且所有視圖控制器都使用越來越多的內存進行累積。
使用導航控制器和推動也將視圖控制器彼此堆疊。
如果您使用情節提要,筆尖或手動創建視圖控制器,則會遇到此問題。
如果您的設計中用戶可以在一系列視圖控制器中移動,那么您可能希望在推動/展示一個新的視圖控制器之前將其關閉。
您可能可以不使用動畫而關閉以前的視圖控制器,然后在每次要顯示一個新的視圖控制器時都顯示新的視圖控制器,以避免出現內存問題。 我必須進行試驗才能獲得我想要的效果,但這就是我的建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.