簡體   English   中英

情節提要劇情和接收內存警告

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM