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;
}

评论:

  • 我必须使用addChildViewController因为我在ChildViewController中使用UIWebViewDelegate。如果不使用addChildViewController,则无法保留 ViewController 并且无法调用UIWebViewDelegate的功能。
  • 我用弧

计划目标:

  • UIScrollView 实现了一个滚动视图,每次我将屏幕滚动到另一个页面时,都会调用函数updateView 。
  • 滚动到另一页后,上一页将消失,因此将调用ChildViewController中的viewWillDisappear 。

截屏:

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

由于这里的声誉低,我无法直接发布图片。

根据该图,ParentViewController大约在第 4 秒被调用。然后内存继续快速增加而没有释放对象。大约在第 30 秒,ParentViewController通过单击导航栏上的后退按钮消失。内存下降了一点,但仍然有一些东西。

目标:

我希望做的是当调用viewWillDisappear时可以销毁ChildViewController的对象并且不再使用它。所以我希望内存在增加一点后总是会下降。否则,内存将与滚动时间成比例地增加并崩溃,直到内存被完全使用。

提前感谢您提供的任何帮助。

4

1 回答 1

0

不确定这是否能解决问题,但尝试从父视图中显式删除 cvc.view。

此外,您正在创建 ChildViewController,但没有释放它。通过调用 init 你增加了它的保留计数,但你并没有在任何地方减少它。像这样(如果您没有更多代码),您的 ChildViewController 将不会被释放,因为保留计数永远不会再为 0。

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 回答