Фон -
Я использую автоматический подсчет ссылок на проект.Корневое представление - это табличное представление (настройка «Мастер / подробности») со списком «слайд-шоу».Нажмите на ячейку таблицы, и вы попадете в подробный вид, который состоит из вида Scroll с представлениями (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];
}
Проблема -
Так что я пытаюсь повторно использовать этот контроллер представления слайд-шоу, поэтому мне нужно обнулить и восстановитьстраницы в середине, потому что каждое слайд-шоу имеет разное количество слайдов.Обратите внимание, что слайд [PageViewController] - это просто представление с изображением в нем.Он обладает большей функциональностью, поэтому нам нужен контроллер, однако основным дисплеем VC является 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 также освобождает память, используемую ImageView / Labels / и т.д., которые используются в этом контроллере представления?
Я попытался добавить self.imageView = nil;в методы viewDidUnload и viewWillUnload PageViewController (по одному не в обоих), и я понял, что установка page = nil не вызывает методы страниц Unload.Правильно ли я освобождаю память?
Я прочитал много статей, но я все еще не уверен, что управляю памятью наилучшим образом.Большое спасибо за помощь!