プロジェクトの構造や、A、B、C、D、E、Fをどのように表示し、次にFからAに戻すかの詳細がわからない場合、私は野生の推測をして、あなたのUIViewControllerに採用しているデザインパターンに応じてリークが発生します。あなたの質問で@CaptJakがコメントしたように、特に、ビューコントローラの周りにデータを渡すために委譲パターンを使用する場合、メモリリークを引き起こすかどうか、方法および時期を判断するのは難しいです。
個人的には、複数のUIViewControllerを提示するなどの複雑なフローを実行して、いくつかの画面に戻る必要がある場合は、スタック上にビューをポップしません。ナビゲーションコントローラを使用しています)、モーダルで表示されている場合はView Controllerを終了し、使用している場合はSeguesを巻き戻します。ここでのリスクは、ビューコントローラのメモリが割り当て解除されている可能性があります。
私はコメントしましたが、十分な評判はありません。私がiOS開発でまだかなり新鮮なので、塩の粒で私の答えを取る。
編集:あなたのアプリケーションの流れで提供された詳細をありがとうございます。 presentViewControllerを使うことができるので、あなたはNavigationControllerで動いていると仮定していますか?その場合は、AからDを再度表示する代わりに、popToViewController
またはpopToRootViewController
(Aがルートビューコントローラの場合)を使用します。 AがDから再び提示された場合、私はあなたのVCスタックに2つのインスタンスがあり、メモリリークを引き起こす可能性があると推測しています。
PopToViewController方法
NSArray arrayOfVCs = self.navigationController.viewControllers;
for(UIViewController *currentVC in arrayOfVCs)
{
if([currentVC isKindOfClass:[ViewControllerA class])
{
[self.navigation.controller popToViewController:currentVC animated:YES]
}
}
(Aは、ナビゲーションコントローラでのルートビューであると仮定した場合)PopToRootViewController方法
[self.navigationController popToRootViewControllerAnimated:YES]
EDIT 2016年4月12日
私は持っていますこの質問をあまり考えて、私は実際にその上で短いRnDを行い、ここで私の発見を共有したいと思っています。私は非常にシンプルなアプリケーションで今までに提示されたすべてのモーダルビューコントローラのスタックを得るために、単純で汚い関数を作りました。
私はA→B→C→B→C→Bから約20~30回試験しました。たびに私はB - > Cの時間を過ごすと、メモリは0.5MB増加しました(私の画面はシンプルですが、あなたとは異なるかもしれません)、20MB以上から50MB以上になりました。この機能で
私は配列で提示ビュースタックのコントローラとも自分の名前の数を記録しました。これまでのところ私のために働いたが、あなたはそれを試してみて、それがあなたのために働くかどうか見ることができる。
//global variables
var vccount = 0
var vcnamelist = [String]()
func getPresentingViewStackCount(currentVC : UIViewController!){
if(currentVC.presentingViewController != nil){
vccount = vccount + 1
let vc = currentVC.presentingViewController
vcnamelist.append(NSStringFromClass((vc?.classForCoder)!))
getPresentingViewStackCount(vc)
}
}
// to use
func someRandomMethod(){
getPresentingViewStackCount(self)
}
でも、ナビゲーションコントローラを使用するのが最も良いと思います。それは彼らのために作られたものです。 :)
は、アプリの構造上のビットより多くのデータを教えてください。あなたはナビゲーションコントローラを使用していますか?ストーリーボード? ?ビュー階層はどのようなものですか? SwiftまたはObj-C? – CaptJak
あなたは 'UITabBarController'を使用していますか?これは、すべてのビューコントローラを1つずつ表示するのに便利です。 – atulkhatri
@atulkhatriデザインが異なるためTabBarを使用していません。 –