UICollectionViewController と UITableViewController を切り替えることができるカスタム セグエとツールバーを使用して、独自のバージョンのコンテナー ビューを作成しようとしています。
数回試行した後、動作するようになり、本来のように動作しているように見えますが、ビュー、子VCなどの適切なクリーンアップを考慮していないことに気付きました.
私が従ったチュートリアルの例 (チュートリアル 5 および 6 による Ray Wenderlich の iOS) の背後にあるロジックに従うのに非常に苦労しましたが、removeFromParentViewController および removeFromSuperview メッセージを使用する必要があるため、メモリを解放していないと思います。
私のコードがどのように機能するかをよりよく理解するために、スクリーンショットと短いビデオを次に示します。
アプリ:
VC 切り替え時のメモリ使用量:
それを示すビデオ:
ビュー階層を処理してクリーンアップするコードのセクションを次に示します (カスタム セグエのオーバーライドされた 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の使用を怠った場合のように):
概念を完全には理解していないかもしれませんが、スイッチごとにメモリが増加するため、クリーンアップが正しくないか、少なくとも何かが欠けているという印象を受けます。
私が見逃しているものを見ることができますか?