Проблемы с памятью iPhone с UIScrollView - PullRequest
2 голосов
/ 28 декабря 2010

Я работаю над приложением для iPad, которое позволяет пользователю прокручивать несколько изображений (обычно около 20 .jpg файлов в одном горизонтальном представлении прокрутки). Размер файла составляет около 200 КБ каждый. Изображения установлены как свойство «Background» UIButton, потому что я хотел позволить пользователю нажать кнопку, чтобы сохранить изображение. Каждый раз, когда я запускаю приложение, оно падает после небольшой прокрутки. Если вы не прокручиваете, он ведет себя нормально. Я запустил приложение, используя инструменты производительности, и не обнаружил никаких утечек.

Я получаю предупреждение об уровне памяти "Level = 1" незадолго до сбоя приложения. У меня было около 8 изображений в scrollview, и у меня никогда не было проблем. Так что я знаю, что это как-то связано с scrollView и изображениями / кнопками. В методе «viewDidLoad» я просто сделал следующее, чтобы настроить scrollView, а затем связал его в Интерфейсном Разработчике:

[scrollView setContentSize:CGSizeMake(5722, 340)];
[scrollView setScrollEnabled:YES];
[scrollView setDelaysContentTouches:YES];

Есть идеи, как заставить это работать? Я добавил изображения непосредственно к кнопке в Интерфейсном Разработчике. Поможет ли это, если я удалю фоновое изображение и вместо этого установлю фон в методе «viewDidLoad»? Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 28 декабря 2010

Похоже, что вам нужно сделать, это создать отдельные ячейки, на которых живут эти изображения, которые будут переработаны, как если бы вы были в виде таблицы.У меня есть некоторый код, который делает это, чтобы вы могли использовать его для своих целей или, по крайней мере, попробовать.Работает так же, как просмотр таблицы.

Он доступен здесь .Это уже делает тяжелую работу для вас, в которой все, что вам нужно сделать, это создать один из них, добавить его в какое-либо представление и создать ваши отдельные ячейки.Эти ячейки будут использоваться повторно при прокрутке, поэтому вам не нужно будет загружать в память одновременно более N + 2 ячеек, где N - это число, которое помещается на вашем экране.

0 голосов
/ 28 декабря 2010

как писал Джер, проблема, похоже, в переработке.Убедитесь, что вы удаляете, освобождаете и обновляете содержимое каждой ячейки каждый раз, когда вы получаете новую в tableView: cellForRowAtIndexPath:

(я бы прокомментировал сообщение Джера, но я не могу этого сделать, возможно, из-замои ограниченные права).

...