Так что у меня проблемы с выпуском некоторых контроллеров представления.
По сути, кажется, что dealloc для PhotoPostViewController никогда не вызывается, поэтому я не могу очистить содержащиеся в нем изображения, которые копают всю память.
Это мой подкласс UIViewController, я могу добавить до 100 из них одновременно в качестве подпредставлений к основному виду прокрутки, после этого iPad становится нехваткой памяти.
@interface PhotoPostViewController : UIViewController {
IBOutlet UIImageView *backgroundImage;
IBOutlet UIImageView *serviceImage;
}
Затем в моем классе основного представления у меня есть метод для создания этих представлений и добавления их в scrollView. Этот метод обычно вызывается из цикла для создания всех необходимых мне подпредставлений.
- (void) addPost {
PhotoPostViewController *postView = [[PhotoPostViewController alloc] initWithNibName:@"PhotoPostViewController" bundle:nil];
[scrollView addSubview:[postView view]];
[viewControllers addObject:postView];
}
viewControllers - это NSMutableArray, созданный в главном классе init.
scrollView - это UIScrollView на моем главном экране.
Все это прекрасно работает, я знаю ограничение использования памяти на iPad и придерживаюсь его в любое время, открывая Popovers для предварительного просмотра изображений, видео и т. Д.
Не хватает памяти, пока я не попытаюсь обновить экран.
Код для этого:
- (IBAction)didPressRefresh:(id)sender {
for(UIView *subview in [scrollView subviews]) {
[subview removeFromSuperview];
}
for(UIViewController *c in viewControllers) {
[c release];
}
[viewControllers removeAllObjects];
}
Ради простоты я очищаю все подпредставления и пытаюсь освободить их перед воссозданием следующего набора подпредставлений, используя функцию выше.
Он удаляет их из представления, но не хватает памяти, добавляя новый набор контроллеров представления. В моих тестовых примерах наборы контроллеров представления идентичны по содержанию, поэтому, если он загружается из чистого первого раза, то он должен загружаться во второй раз и каждый раз после этого, если я все освобождаю должным образом.
На самом деле происходит сбой из-за нехватки памяти при создании второго набора контроллеров представления.
Во время отладки я установил контрольные точки для методов 'viewDidUnload' и 'dealloc', но они никогда не были достигнуты.
Похоже, что сам UIViewController выпускается, а UIImageViews внутри него нет, очевидно, они обычно освобождаются моим кодом в методе dealloc (или viewDidUnload).
Так что я в замешательстве.
Считать вещи, которые мне кажутся похожими, счётчики ссылок в порядке. так почему же до сделки не дошло?
Andi