6

私のプロジェクトでは、スクロール用UIPageControlのコンテナとしてを使用しています。UIViewControllerこのチュートリアルを使用しました (ARCストーリーボードを使用): http://www.wannabegeek.com/?p=168およびソース コード: https://github.com/wannabegeek/PageViewController ご覧ViewControllersのとおり、プロジェクト には 3 つあります。に、子として追加されCustomPagerViewControllerます。そのプロジェクトでViewControllersは追加されるのは 3 つだけですが、私のプロジェクトでは 3 つ以上を取得し、ViewControllersそれらを別のテキスト、画像、ラベルなどで再利用しています。ViewControllers問題は、プロジェクトでは、ロードされるたびにすべてCustomPagerViewControllerがロードされ、これがメモリを消費することです。一度にロードするのではなく、この問題に対処する別の方法を探していますか?

4

1 に答える 1

0

この方法でコントローラーの割り当てを最適化しようとするべきではありません。ビュー コントローラをメモリに保持すると明らかにスペースが消費されますが、それほど多くはありません。

ここで、コントローラーとそのビューを区別する必要があります。ビューは画面に表示されるために大量のメモリを消費することがありますが、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を使用することもできます。

于 2013-05-13T12:12:48.273 に答える