1

2 つのビュー コントローラー VC1 と VC2 があります。VC2のオブジェクトを作成し、ボタンアクションで押すことでVC2をプッシュしようとしています。

VC2 *vcOject = [[VC2 alloc]init];
[self.navigationController pushViewController:vcOject animated:YES];
[vcObject release];

VC2では、ボタンアクションでポップしています..

[self.navigationController popViewControllerAnimated:YES];

今、私はVC1にいて、再び表示のためにVC2をプッシュしています。しかし、今回は EXC_BAD_ACCESS エラーが発生しています。しかし、[vcObjectリリース]にコメントしたとき。それは正常に動作します。しかし、いつメモリを解放できますか。ナビゲーションコントローラーでのメモリの処理方法。

4

2 に答える 2

1

簡単な答え: ARC を使用する必要があります

なんらかの理由でそれができない場合は、View Controller がスタックからポップされると割り当てが解除され、スタックにプッシュするたびに新しいものを割り当て/初期化する必要があります。または、それをしたくない場合 (たとえば、VC2 のビューが非常に重い場合) を取り除き、VC1[vcObject release]の参照を保持し、同じものをスタックにプッシュし続けます。vcObjectただし、これら 2 つを混在させないでください。毎回新しいオブジェクトを作成する場合は、それをスタックにプッシュした後に解放する必要があります。また、同じ VC2 をスタックにプッシュするたびに参照を保持している場合は、VC1 のdealloc. VC1 の方法で解放する必要deallocがあることに注意してください。そうしないと、メモリがリークされます。

しかし、本当に。ARCを使用する必要があります。

于 2012-05-10T04:57:39.577 に答える
1

使用しない場合[vcObject release]。アプリケーションでメモリ リークが発生します。

これは、ARCを使用せずにpush/pop viewControllerでメモリ管理を処理する方法です

VC2 *vcOject = [[VC2 alloc] init];
[[self.navigationController pushViewController:vcOject animated:YES] autorelease];
于 2012-05-10T05:20:20.170 に答える