2012-04-17 3 views
1

В моем приложении я использую вид прокрутки, в котором я показываю 300 изображений (400 kB). Это занимает почти 2 минуты, и, как результат, когда я прокручиваю вверх и вниз, он не является гладким.ScrollView слишком медленный - проблема с управлением памятью?

Как я могу решить эту проблему?

Примечание: Я заметил, что после того, как я прокручу вниз до конца прокрутки, он становится плавным. Проблема с прокруткой появляется только в первый раз.

+0

Как ваш вопрос связан с управлением памятью? Вы пробовали профилировать приложение? – trojanfoe

ответ

0

Попробуйте добавить это в функции загрузки (где вы загружаете изображения). Если вы используете время или цикл для загрузки изображений, добавьте этот код в цикл.

NSURL *url=//here url for your image 
dispatch_queue_t currentQueue = dispatch_get_current_queue(); 
dispatch_queue_t dataConvertorQueue = dispatch_queue_create("Fetching images", NULL); 
dispatch_async(dataConvertorQueue, ^{ 
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    dispatch_async(currentQueue, ^{ 
     //replace imageView with your imageView outlet 
     imageView.image = [[UIImage alloc] initWithData:data]]; 
    }); 
}); 
dispatch_release(dataConvertorQueue); 

Этот код помогает вам получать и отображать изображения с помощью URL-адреса, и он отлично работает с табличным просмотром. Это может быть не совсем то, что вы хотите, но это даст вам представление о том, как это сделать. Надеюсь, это поможет вам.

0

Не загружайте все изображения заранее. Просто загрузите изображения, которые будут отображаться в данный момент, и следующее + последнее изображение.

Насколько я понимаю, вы загружаете все изображения, когда scrollview загружается/отображается. Поскольку у вас много изображений, это будет намного быстрее и значительно больше экономии памяти, если вы просто загрузите/получите в памяти три изображения. Это будет предыдущее/левое показанное изображение и не видно - текущее отображаемое и видимое изображение и следующее/правое изображение, которое не видно.

Итак, если вы перемещаете/прокручиваете влево, вы в основном перемещаете прокрутку влево и показываете правильное изображение, которое уже загружено. В фоновом режиме вы загрузите следующее правильное изображение, в то время как вы удалите левое большинство изображений.

Всегда загружайте максимально 4 изображения.

Посмотрите на бесконечный пример прокрутки WWDC 2011 - расширенный просмотр прокрутки 104-го уровня для хорошего визуального примера и примера кода.

+0

вы можете объяснить больше. Я хорошо понимаю. – yatanadam

Смежные вопросы