0

私の 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が呼び出されます。
  • 別のページにスクロールすると、前のページが消えるため、 ChildViewControllerviewWillDisappearが呼び出されます。

スクリーンショット:

http://postimage.org/image/mzmksm9d5/

ここでの評判が悪いため、画像を直接投稿することはできません。

図によると、ParentViewControllerは約 4 秒目に呼び出されます。その後、オブジェクトが解放されることなく、メモリが急速に増加し続けます。約 30 秒で、ナビゲーション バーの [戻る] ボタンをクリックして、 ParentViewControllerを非表示にします。メモリは少し落ちていますが、まだ何かが残っています。

ゴール:

私がやりたいことは、viewWillDisappearが呼び出されて使用されなくなったときに、 ChildViewControllerのオブジェクトを破棄できるようにすることです。したがって、メモリが少し増えた後は常にメモリが低下すると思います。そうしないと、メモリがスクロール時間に比例して増加し、メモリが完全に使用されるまでクラッシュします。

あなたが提供できる助けを前もって感謝します。

4

1 に答える 1

0

これで問題が解決するかどうかはわかりませんが、cvc.view を親ビューから明示的に削除してみてください。

また、ChildViewController を作成していますが、解放していません。init を呼び出すことで保持カウントを増やしましたが、どこにも減らしていません。このように (さらにコードがない場合)、保持カウントが再び 0 になることはないため、ChildViewController は解放されません。

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;
于 2012-12-17T12:58:24.487 に答える