私のプロジェクトでは、スクロール用UIPageControl
のコンテナとしてを使用しています。UIViewController
このチュートリアルを使用しました (ARC
ストーリーボードを使用): http://www.wannabegeek.com/?p=168およびソース コード: https://github.com/wannabegeek/PageViewController ご覧ViewControllers
のとおり、プロジェクト
には 3 つあります。に、子として追加されCustomPagerViewController
ます。そのプロジェクトでViewControllers
は追加されるのは 3 つだけですが、私のプロジェクトでは 3 つ以上を取得し、ViewControllers
それらを別のテキスト、画像、ラベルなどで再利用しています。ViewControllers
問題は、プロジェクトでは、ロードされるたびにすべてCustomPagerViewController
がロードされ、これがメモリを消費することです。一度にロードするのではなく、この問題に対処する別の方法を探していますか?
1 に答える
この方法でコントローラーの割り当てを最適化しようとするべきではありません。ビュー コントローラをメモリに保持すると明らかにスペースが消費されますが、それほど多くはありません。
ここで、コントローラーとそのビューを区別する必要があります。ビューは画面に表示されるために大量のメモリを消費することがありますが、iOS には、不要になったときにこのメモリを解放するための独自のメカニズムが既にあります (つまり、ビューが画面に表示されない/ウィンドウがない)。 .
iOS ビュー コントローラーはビュー メモリを自分で解放するために使用されていました (この動作は [UIViewControllers didReceiveMemoryWarning] にありました) が、iOS 6 ではそうではなくなりました。ビューを画面に表示するために使用される (グラフィック) リソースのほとんどの部分は、iOS によって既に解放されている可能性があるため、このメソッドでこれらのビューを nilling (または dealloc) しても、あまりメモリを節約できないことに注意してください。最終的に解放される可能性のあるメモリの量は 0 に近くなります。
要約すると、あなたの場合、このガイドを使用して PagerViewController を適切な iOS コンテナー コントローラーに変換します。重要なのは、次のメソッドを呼び出すことです。
[UIViewController addChildViewController:]
[UIViewController willMoveToParentViewController]
[UIViewController removeFromParentViewController]
[UIView addSubview:]
[UIView removeFromSuperview]
必要に応じて適切な順序で。あなたの場合、 scrollViewDidScroll メソッドでこれらを追加/削除できます。このように使用して、Apple の魔法を起こしてください。
すぐに使える優れた機能を提供するUIPageViewControllerを使用することもできます。