【发布时间】:2012-12-17 12:37:57
【问题描述】:
在我的 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 通过单击导航栏上的后退按钮消失。内存减少了一点,但仍然有一些东西。
目标:
我希望做的是 ChildViewController 的对象可以在 viewWillDisappear 被调用并且不再使用时被销毁。所以我希望内存在增加一点后总是会下降。否则,内存将与滚动次数成正比增加并崩溃,直到内存被完全使用。
提前感谢您提供的任何帮助。
【问题讨论】:
标签: objective-c memory-management automatic-ref-counting viewwillappear