-1

UICollectionViewController と UITableViewController を切り替えることができるカスタム セグエとツールバーを使用して、独自のバージョンのコンテナー ビューを作成しようとしています。

数回試行した後、動作するようになり、本来のように動作しているように見えますが、ビュー、子VCなどの適切なクリーンアップを考慮していないことに気付きました.

私が従ったチュートリアルの例 (チュートリアル 5 および 6 による Ray Wenderlich の iOS) の背後にあるロジックに従うのに非常に苦労しましたが、removeFromParentViewController および removeFromSuperview メッセージを使用する必要があるため、メモリを解放していないと思います。

私のコードがどのように機能するかをよりよく理解するために、スクリーンショットと短いビデオを次に示します。

アプリ:

ここに画像の説明を入力

VC 切り替え時のメモリ使用量:

ここに画像の説明を入力

それを示すビデオ:

YouTube リンク

ビュー階層を処理してクリーンアップするコードのセクションを次に示します (カスタム セグエのオーバーライドされた perform: メソッド)。

- (void) perform
{
    // Set source and destination view controllers
    FirstViewController *sourceViewController = (FirstViewController *) self.sourceViewController;
    UIViewController *destinationViewController = (UIViewController *) self.destinationViewController;

    // Handle child and parent view controller designation (the view controller’s view is added to the window hierarchy)
    destinationViewController.view.frame = sourceViewController.containerView.bounds;

    [sourceViewController addChildViewController:destinationViewController];

    [destinationViewController.view removeFromSuperview];

    [sourceViewController.containerView addSubview:destinationViewController.view];

    [destinationViewController didMoveToParentViewController:sourceViewController];

    // Remove actual destinationViewController from the container every time there's a transition (segue)
    [destinationViewController removeFromParentViewController];
}

親 VC (タブ バーの最初の VC) の子の数も記録しています。

NSLog(@"Amount of Children: %d", [self.childViewControllers count]);

そして、カウントが上がらないことを確認しています(removeFromParentViewControllerの使用を怠った場合のように):

ここに画像の説明を入力

概念を完全には理解していないかもしれませんが、スイッチごとにメモリが増加するため、クリーンアップが正しくないか、少なくとも何かが欠けているという印象を受けます。

私が見逃しているものを見ることができますか?

4

1 に答える 1

1

プロファイリング時に「リーク」を選択して、メモリ リークをチェックします。今、メモリ割り当てをチェックしていますが、新しいオブジェクトの初期化のために、ビューの切り替えの間にメモリ使用量が増加するのは正常です。避けるべきことは、ビューを連続的に切り替えた後に一定のメモリが増加することです

于 2013-06-27T15:23:20.580 に答える