Указание IKImageBrowserView не планировать предварительную загрузку

Для нашего переписывания проекта инфраструктуры iMedia с открытым исходным кодом (используемого в настоящее время десятками разработчиков) мы переключаемся на IKImageBrowserView и испытываем проблемы с кэшированием.

Похоже, что IKImageBrowserView любит предварительно загружать/предварительно выбирать кеш изображений в качестве фоновой задачи с низким приоритетом, как можно больше еще не видимых элементов. Это может быть полезно, за исключением того, что мы не хотим нагружать ЦП (и сеть для удаленно извлеченных изображений), если мы можем помочь.

Тем более, что у нас есть собственный механизм кэширования FIFO (чтобы мы могли совместно использовать данные эскизов с другими представлениями в одних и тех же данных), все, что он делает, — это заполняет кеш до предела, а затем вызывает сброс старых элементов.

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

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

Кстати, обсуждение по теме: http://lists.apple.com/archives/cocoa-dev/2007/Nov/msg02011.html


person danwood    schedule 08.10.2009    source источник
comment
Подано. Пожалуйста, обманите! openradar.appspot.com/radar?id=88402   -  person danwood    schedule 09.10.2009


Ответы (1)


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

Похоже, в IKImageBrowserView есть частный метод, который называется _shouldProcessLongTasks. Я попытался переопределить его, чтобы просто вернуть НЕТ, и это, по-видимому, предотвращает поведение предварительной загрузки для изображений, которые еще не видны в представлении (по крайней мере, в Snow Leopard, нужно будет проверить в Leopard, чтобы убедиться, что поведение такое же) . Похоже на использование частного API с довольно низким уровнем риска, поскольку, если метод изменится, он просто больше не будет вызываться. Когда вы сообщаете об ошибке в Apple, опубликуйте номер радара, чтобы другие затронутые лица могли зарегистрировать дубликат и попытаться получить общедоступный API и / или изменение поведения для этого.

Для записи, похоже, что текущее поведение заключается в том, что оно будет выполнять предварительную выборку данных в фоновом режиме, пока приложение находится на переднем плане, а окно, содержащее представление, является ключевым. Если вы переключаетесь на другое приложение или окно, предварительная загрузка прекращается.

person Brian Webster    schedule 09.10.2009