Оптимизированное изображение, загружающееся в UIScrollView

Ре my.cnf на Mac OS X при использовании MySQL с mysql.com dmg распределение пакета

По умолчанию, my.cnf нигде не найти.

необходимо скопировать один из /usr/local/mysql/support-files/my*.cnf к /etc/my.cnf и перезапуск mysqld. (Который можно сделать в предпочтительной области MySQL при установке ее.)

16
задан Helen 17 July 2009 в 20:26
поделиться

4 ответа

Меня немного озадачивает "отрывистая" прокрутка. Поскольку NSOperationQueue выполняет операции в отдельных потоках, я ожидал, что в худшем случае вы можете увидеть на экране пустые элементы UIImageView.

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

Несколько моментов, которые следует учитывать:

  1. Попробуйте загрузить ThumbnailView с помощью одно изображение в начале и отключение очереди NSOperation (просто пропустите все после проверки «если загружено». Это даст вам немедленное представление, влияет ли код NSOperation на производительность.

  2. Помните, что -scrollViewDidScroll: может выполняться много раз в течение одного действия прокрутки. В зависимости от того, как движется прокрутка и как реализован ваш -centerThumbIndex , вы можете пытаться поставить в очередь одни и те же действия несколько раз. Если вы учли это в своем -initWithOperableImage или -loaded, то, возможно, ваш код здесь вызывает проблемы с синхронизацией / блокировкой (см. 3 ниже). Вы должны отслеживать, была ли инициирована NSOperation, используя «атомарное» свойство в экземпляре ThumbnailView. Предотвратить постановку в очередь другой операции, если это свойство установлено, и только сбросить это свойство (вместе с загруженным) в конце процессов NSOperation.

  3. Поскольку NSOperationQueue работает в своем собственном потоке (ах), убедитесь, что ни один из ваших кодов, выполняемых в NSOperation, не синхронизируется или блокируется с основным потоком. Это устранило бы все преимущества использования NSOperationQueue.

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

  5. Сделайте убедитесь, что у вас достаточно эскизов, по крайней мере, на одну или две страницы вперед и назад, так что, если NSOperationQueue отстает, у вас будет высокая погрешность, прежде чем пустые эскизы станут видимыми.

  6. Убедитесь, что ваша операция загрузки загружает только предварительную масштабированный эскиз, не загружая полноразмерное изображение и не изменяя масштаб или не обрабатывая. Это было бы много дополнительных накладных расходов в середине действия прокрутки. Пойдите еще дальше и убедитесь, что вы преобразовали их в PNG16 без альфа-канала. Это даст как минимум (4: 1) уменьшение размера без заметных изменений в визуальном изображении. Также рассмотрите возможность использования изображений в формате PVRTC, которые еще больше уменьшат размер (8: 1). Это значительно сократит время, необходимое для чтения изображений с «диска».

Прошу прощения, если что-то из этого не имеет смысла. Я не вижу проблем с опубликованным вами кодом, и проблемы, скорее всего, возникнут в ваших реализациях классов NSOperation или ThumbnailView. Без изучения этого кода я, возможно, не смогу эффективно описать условия.

Я бы рекомендовал опубликовать ваш код NSOperation для загрузки и выгрузки и, по крайней мере, достаточное количество ThumbnailView, чтобы понять, как он взаимодействует с экземплярами NSOperation.

Надеюсь, это в какой-то степени помогло,

Барни

15
ответ дан 30 November 2019 в 22:10
поделиться

Изучая эту проблему, я нашел два дополнительные ресурсы, которые могут быть интересны:

Ознакомьтесь с примером проекта iPhone "PageControl": http://developer.apple.com/iphone/library/samplecode/PageControl/index.html

Это лениво загружает контроллеры представления в UIScrollView.

  • и -

Посмотрите библиотеку cocoa touch: http://github.com/facebook/three20 , в которой есть класс TTPhotoViewController, который лениво загружает фотографии / эскизы из Интернета / с диска.

1
ответ дан 30 November 2019 в 22:10
поделиться

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

Установите флаг для отключения загрузки изображений в:

-scrollViewWillBeginDragging:

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

-scrollViewDidEndDragging:willDecelerate:

UIScrollViewDelegate . Когда параметр willDecelerate: равен NO , движение остановлено.

3
ответ дан 30 November 2019 в 22:10
поделиться

проблема здесь:

 UIImage *image = [UIImage imageWithContentsOfFile:path];

Кажется, что поток или нет, когда вы загружаете файл с диска (что, возможно, происходит в основном потоке, независимо от того, я не совсем уверен), все останавливается. Обычно вы не видите этого в других ситуациях, потому что у вас нет такой большой движущейся области, если она вообще отсутствует.

2
ответ дан 30 November 2019 в 22:10
поделиться