Указание IKImageBrowserView не планировать предварительную загрузку - PullRequest
3 голосов
/ 09 октября 2009

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

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

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

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

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

Кстати, некоторые связанные обсуждения: http://lists.apple.com/archives/cocoa-dev/2007/Nov/msg02011.html

1 Ответ

4 голосов
/ 09 октября 2009

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

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

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

...