内存pipe理,ARC – 什么零?

背景

我正在项目上使用自动引用计数。 根视图是一个表视图(主/从设置),显示“幻灯片”列表。 点击一个表格单元格,然后你被带到由一个带有视图的滚动视图(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]; } 

问题

所以我试图重复使用这个幻灯片放映视图控制器,所以我需要零和重新创build中间的页面,因为每个幻灯片放映有不同数量的幻灯片。 注意一张幻灯片[PageViewController]只是一个包含ImageView的视图。 它有更多的function,所以我们需要控制器,但VC的主要显示是ImageView。 我已经创build了下面的方法,在用新数据再次运行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设置为零? 或者设置页面本身为零还释放内存使用的视图控制器中使用的ImageView /标签/等?

我试图添加self.imageView =零; 到PageViewController的viewDidUnload和viewWillUnload方法(一次不在两个),我意识到设置page = nil不会调用页面Unload方法。 我是否正确地释放了内存

我读了很多文章,但我仍然不知道如果我以最好的方式pipe理内存。 非常感谢你的帮助!

一般来说,你不应该把事情设置为零。 而在这个特定的情况下,把事情设定为零是无所事事。

line page = nil; 是多余的,因为variablespage无论如何都会立即超出范围。 ARC知道这一点,并不需要你把它设置为零。

self.pagesArray = nil; 是多余的,因为你跟随self.pagesArray = [[NSMutableArray alloc] init]; 。 第二行本身就足够了。