私の ParentViewController では、次のように入力します。
- (void)updateView:(NSInteger)_index article:(AObject *)aObject {
UIView *aUIView = [someUIViews objectAtIndex:_index];
// clear view
for (UIView *view in aUIView.subviews) {
[view removeFromSuperview];
}
// create view
ChildViewController *cvc = [[ChildViewController alloc] init:aObject context:managedObjectContext];
cvc.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self addChildViewController:cvc];
[aUIView addSubview:cvc.view];
cvc = nil;
}
ChildViewController で、次のように入力します。
.h ファイル
@interface ChildViewController : UIViewController <UIWebViewDelegate> {
AObject *aObject;
UIWebView *webView;
}
.m ファイル
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:(BOOL)animated];
webView.delegate = nil;
webView = nil;
aObject = nil;
}
述べる:
- ChildViewControllerでUIWebViewDelegateを使用するため、addChildViewControllerを使用する必要があります。addChildViewControllerを使用しないと、ViewController を保持できず、UIWebViewDelegateの関数を呼び出すことができません。
- ARCを使っています
プログラムの目的:
- UIScrollView によって実装されているスクロール ビューがあり、画面を別のページにスクロールするたびに、関数updateViewが呼び出されます。
- 別のページにスクロールすると、前のページが消えるため、 ChildViewControllerのviewWillDisappearが呼び出されます。
スクリーンショット:
http://postimage.org/image/mzmksm9d5/
ここでの評判が悪いため、画像を直接投稿することはできません。
図によると、ParentViewControllerは約 4 秒目に呼び出されます。その後、オブジェクトが解放されることなく、メモリが急速に増加し続けます。約 30 秒で、ナビゲーション バーの [戻る] ボタンをクリックして、 ParentViewControllerを非表示にします。メモリは少し落ちていますが、まだ何かが残っています。
ゴール:
私がやりたいことは、viewWillDisappearが呼び出されて使用されなくなったときに、 ChildViewControllerのオブジェクトを破棄できるようにすることです。したがって、メモリが少し増えた後は常にメモリが低下すると思います。そうしないと、メモリがスクロール時間に比例して増加し、メモリが完全に使用されるまでクラッシュします。
あなたが提供できる助けを前もって感謝します。