gpt4 book ai didi

iphone - 内存管理,ARC - 什么是零?

转载 作者:行者123 更新时间:2023-11-28 18:25:53 25 4
gpt4 key购买 nike

背景 -

我正在对一个项目使用自动引用计数。 Root View 是一个 TableView (主/详细设置),显示“幻灯片放映”列表。单击一个表格单元格,您将被带到详细 View ,该 View 由一个带有 View (viewController.view) 的 ScrollView 组成(这是“幻灯片放映”)。每个幻灯片放映都有一个封面和封底(相同的 View Controller 格式不同),它们夹在可变数量的页面之间。下面是加载幻灯片的代码:

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

问题 -

所以我试图重用这个幻灯片 View Controller ,所以我需要 nil 并重新创建中间的页面,因为每个幻灯片都有不同数量的幻灯片。请注意幻灯片 [PageViewController] 只是一个包含 ImageView 的 View 。它有更多的功能,所以我们需要 Controller ,但是 V.C. 的主显示器。是 ImageView 。在使用新数据再次运行 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?或者将页面本身设置为 nil 是否也会释放该 View Controller 中使用的 ImageView/Labels/etc 使用的内存?

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

我已经阅读了很多文章,但我仍然不确定我是否以最佳方式管理内存。非常感谢您的帮助!

最佳答案

一般来说,您不必将其设置为 nil。在这种特定情况下,将 things 设置为 nil 什么都不做。

page = nil; 行是多余的,因为变量 page 无论如何都会立即超出范围。 ARC 知道这一点,不需要您将其设置为 nil。

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

关于iphone - 内存管理,ARC - 什么是零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9621262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com