2013-04-22 76 views
0

使用: 的Xcode 4.6 故事板 ARC 型號順着接下去SecondViewController應用程序加載視圖 - 控制後運行速度慢,那麼卸載約15-20倍

我有了加載一個新veiwController當主視圖控制器的應用該設備向右旋轉。當應用程序啓動時,一切都很好。如果我旋轉設備,然後返回卸載第二個視圖控制器,大約15-20次應用程序非常糟糕。我縮小了它只發生在seconed視圖控制器加載時,只有當我旋轉設備一個nunmber時間。我也縮小了這是一個記憶問題。我安裝了一個應用程序,用於跟蹤所使用和可用的內存。當我旋轉設備多次時,我的記憶從400mb到900mb。我儘可能提供儘可能多的信息。每個視圖有8個NSTimers,每秒觸發一次。

有沒有辦法來編程卸載視圖,以確保正在被卸載?

我已經包含了這個代碼,以確保裝卸:

' - (空)的setView:(UIView的*)aView { 的NSLog(@ 「>>>輸入%s,< < <」 PRETTY_FUNCTION);

if (!aView)   // view is being set to nil 
{ 
    NSLog(@"Should be unloading now"); 
} 

[super setView:aView]; 

NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__); 

}

日誌結果: 2013年4月22日16:42:03.588 XXXXXXXX [XXXXXXX] >>>進入 - [GraphViewController的setView:] < < < 2013年4月22日16 :42:03.589 XXXXXXXX [XXXXXXX] < < <離開 - [GraphViewController的setView:] >>>

` 我不知道我需要看在糾正這種東西。

任何「積分」在正確的方向將不勝感激。

感謝

回答

2

你還沒有給你如何「卸載」 SecondViewController多的信息。你是否也在做模態賽?如果是這樣,那就是你的問題 - 每當你做一個segue時,你實例化一個新的視圖控制器,如果這些是模態segues,那麼呈現的控制器有一個指向呈現控制器的強指針,所以這些控制器都不會被解除分配當你來回走動。

作爲一項規則,你應該從來不會後退使用任何東西,但開卷賽格瑞進去故事板。因此,解決您的問題的方法是使用unwind segue從SecondViewController返回到MainViewController - 這實際上會返回到您所來自的MainViewController的同一實例,並且將取消分配SecondViewController。如果你不知道如何放鬆休息,我會編輯我的答案,告訴你如何。

編輯後:

要開卷塞格斯,你做兩件事情。在你要回到的控制器中,添加一個方法 - 兩個重要的事情是它是一個IBAction,並且它有一個輸入到UIStoryboardSegue *的單個參數。無論你怎麼稱呼它,它甚至不需要在它內部有任何代碼,儘管我通常會在日誌語句中加入以確保它被調用。然後,在您從控制檯展開的IB中,您控制從UI元素(如按鈕或表格視圖單元格)(或從控制器本身,如果要從代碼中激發它)拖動到下面的綠色「退出」圖標場景的底部 - 重要的是要注意,您正在從UI元素拖動到同一控制器中的退出圖標,而不是控制器之間。當您鬆開退出圖標時,您會看到使用上述簽名創建的任何方法。選擇你想要的,就是這樣。如果您想將任何信息傳遞迴目標控制器,您可以像在其他任何segue一樣在源控制器中實現prepareForSegue。

+0

感謝您的寶貴信息。我不知道如何倒退。我沒有放鬆的經驗。如果你有一個很好的樣本。再次感謝你!! – Eric 2013-04-23 04:35:06

+0

我沒有用於加載/卸載第二個視圖控制器的UI元素。我正在使用下面的代碼。 – Eric 2013-04-23 22:53:49

+0

@Eric,然後,正如我所說的,您從控制器本身(其底部欄中的圖標)拖動到退出圖標。在這種情況下,您需要給segue一個標識符,以便您可以在代碼中使用它。 – rdelmar 2013-04-23 23:41:39