【发布时间】:2012-03-26 03:34:04
【问题描述】:
背景 -
我在一个项目上使用自动引用计数。根视图是显示“幻灯片放映”列表的表格视图(主/详细设置)。单击一个表格单元格,您将进入详细视图,该视图由一个带有视图 (viewController.view) 的滚动视图组成(这是“幻灯片放映”)。每个幻灯片放映都有一个封面和封底(相同的视图控制器格式不同),它们夹着可变数量的页面。这是加载幻灯片的代码:
- (void)loadScrollView
{
// The front and back cover are set in Interface Builder because they
// are reused for every slide show, just labels are changed.
[self.scrollView addSubview:self.frontCoverViewController.view];
[self.frontCoverViewController setCoverTitle:_data.name creationDate:_data.creationDate isFrontCover:YES];
[self.pagesArray addObject:self.frontCoverViewController];
for (int i = 0; i < [self getTotalNumberOfComps]; i++)
{
PageViewController *pageView = [[PageViewController alloc] init];
pageView.data = [_compsArray objectAtIndex:i];
[_scrollView addSubview:pageView.view];
pageView.data.imgView = pageView.imageView;
pageView.slideShowViewController = self;
[_pagesArray addObject:pageView];
}
[self.scrollView addSubview:self.backCoverViewController.view];
[self.backCoverViewController setCoverTitle:_data.name creationDate:_data.creationDate isFrontCover:NO];
[self.pagesArray addObject:self.backCoverViewController];
[self.scrollView bringSubviewToFront:_frontCoverViewController.view];
[self setCurrentPage:0];
}
问题 -
所以我试图重用这个幻灯片视图控制器,所以我需要 nil 并重新创建中间的页面,因为每个幻灯片都有不同数量的幻灯片。请注意,幻灯片 [PageViewController] 只是一个带有 ImageView 的视图。它具有更多功能,因此我们需要控制器,但需要 V.C. 的主显示器。是图像视图。在使用新数据再次运行 loadScrollView 之前,我创建了以下方法来“清空”幻灯片放映。这是空方法:
- (void)saflyEmptyScrollView
{
for (int i = 0; i < [self.pagesArray count]; i++)
{
if (i == 0 && i == ([self.pagesArray count]-1)) {
CoverViewController *cover = (CoverViewController*)[self.pagesArray objectAtIndex:i];
[cover.view removeFromSuperview];
} else {
PageViewController *page = (PageViewController*)[self.pagesArray objectAtIndex:i];
[page.view removeFromSuperview];
page = nil;
}
}
self.pagesArray = nil;
self.pagesArray = [[NSMutableArray alloc] init];
}
大问题 -
我的主要问题是我需要将每个页面的 ImageView 设置为零吗?或者将页面本身设置为 nil 是否也会释放该视图控制器中使用的 ImageView/Labels/etc 使用的内存?
我尝试添加 self.imageView = nil;到 PageViewController 的 viewDidUnload 和 viewWillUnload 方法(一次一个,而不是两个),我意识到设置 page = nil 不会调用页面的 Unload 方法。我是否正确释放了内存。
我已经阅读了很多文章,但我仍然不确定我是否以最好的方式管理内存。非常感谢您的帮助!
【问题讨论】:
标签: iphone ios memory-management memory-leaks