即使我将其设置为零,内存仍在不断增加(随附屏幕截图)



在我的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的函数
  • 我使用ARC

项目目标:

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

屏幕截图:

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

我不能直接发布图片,因为这里的声誉很低

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

目标:

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

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

不确定这是否能解决问题,但请尝试从父视图中显式删除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;

最新更新