Scrollview с изображениями все равно вылетает даже при ленивой загрузке? - PullRequest
0 голосов
/ 18 февраля 2011

У меня есть представление прокрутки, содержащее несколько изображений, каждое из которых составляет около 100 КБ.Я добавляю их в uiscrollview, создавая контроллеры uiview для их хранения.контроллеры хранятся в scrollview.Я удаляю его вид из суперпредставления и заменяю его некоторой строкой, когда изображение прокручивается из видимой области.Я думаю, у меня все хорошо.Но после нескольких прокруток у меня все еще возникал сбой (даже прокрутка вперед и назад на одних и тех же 5 изображениях).

Я заметил, что dealloc каждого контроллера вызывается, когда он удаляется из представления прокрутки, а не viewDidUnload.1003 *

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2011

Я встретил эту проблему и решил сейчас. Надеюсь, что это работает для кого-то еще. :)
Ниже приведен пример кода, вызывающего сбой (строка 3):

UIImage *image = [image imageNamed:@"img.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[image release]; // Need not release here!!!
...
[cellView addSubview:imageView];
[imageView release];
0 голосов
/ 18 февраля 2011

viewDidUnload вызывается, когда само viewController освобождает свой вид.Он не вызывается, если вы отменили просмотр (что означает, что viewDidUnload имеет отношение только к ситуации с предупреждением памяти).Чтобы полностью удалить представление и его контроллер представления, вы должны удалить представление из его суперпредставления, а затем освободить контроллер представления.Тогда нормально viewDidUnload не называется.

Трудно понять, как вы это реализовали и почему это пошло не так.Но позвольте мне предложить несколько вещей.

Методы контроллера представления, такие как viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear и т. Д., Здесь бесполезны, потому что никто из них не может сказать вамвид в данный момент на экране или нет.Единственный способ, которым вы можете сказать, - это получать contentOffset представления прокрутки каждый раз, когда происходит прокрутка (методами делегата UIScrollViewDelegate), и проверять себя, находятся ли эти представления в видимой области или нет.Следовательно, там не обязательно использовать UIViewController.Просто используйте представления, например UIImageView.Динамически создайте экземпляр представления, когда он видим, или, что более желательно, когда около видимой области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...