0

「masterButtons」と「subButtons」のセットのコードの繰り返しを防ぐために、UIViewController をサブクラス化しています。

約 1200 ページの変更後、わずか 3 つの空白ページ (ボタンと他のいくつかのオブジェクトが表示されているだけ) の間を移動すると、アプリが常にクラッシュすることに気付くまで、すべてが美しく機能しているように見えました。

インストルメント (+ デバイスでのテスト)では、メモリ リークは表示されませんが、これらのボタン オブジェクトのインスタンスが何百も存在することが示されます。('Created & Still Living' フィルタが選択されています。) また、viewDidUnload / didReceiveMemoryWarning は、どの ViewControllers からも呼び出されません!

アプリの他のページ (UIViewController がサブクラス化されていない) ではこれらの問題は発生していません。

そのため、ViewController のコンテンツが再作成されているように見え、以前に作成されたものは削除されていません。 これを引き起こしている可能性のある UIViewController のサブクラス化の一般的な落とし穴はありますか? 私が見逃している可能性があるものはありますか?

アドバイスをいただければ幸いです。(この問題で Mac を窓から放り投げたい気分です! )

Top_ViewController      (contains 'MasterButtons')
       v
Area1_ViewController    (subclass of TOP_ViewController) (contains 'subButtons', and  a few texts fields etc.)
       v
aPage_ViewController    (subclass of Area1_ViewController)  (currently blank page)

(ARC とストーリーボードを使用します。ストーリーボード ビュー コントローラーには、それぞれのクラスとして「aPage_ViewController」があります。)

4

1 に答える 1

1

ストーリーボードをループ形式で作成した場合、常に新しいものを作成することがありますviewControllers。各セグエ トランジションは新しいものを作成するviewControllerため、メモリ リークは発生しない可能性がありますが、メモリが消費されます。

UITabBarControllerまたはを使用しUINavigationControllerて前後に移動し、ループを作成しないでください。

またviewDidUnload、iOS6 では非推奨になっていますが、警告を無視したのでしょうか?

編集:

次のようなことを試してください:

-(void)tab1_IsPressed:(UIButton *)paramSender{
    Top_ViewController *target_VC = (Top_ViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"page_1"];
    [self.navigationController popViewControllerAnimated:NO];
    [self.navigationController pushViewController:target_VC animated:NO];
}
-(void)tab2_IsPressed:(UIButton *)paramSender{
    Top_ViewController *target_VC = (Top_ViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"page_2"];
    [self.navigationController popViewControllerAnimated:NO];
    [self.navigationController pushViewController:target_VC animated:NO];
}
于 2012-10-24T15:52:40.040 に答える