Что происходит с просроченным [UIImage imageNamed:] объектом? - PullRequest
3 голосов
/ 23 июля 2010

Как видно из заголовка, предположим, что я создаю экземпляр объекта UIImage с помощью imageNamed: .., это создает и возвращает указатель на объект автокеширования UIImage, верно?

Что произойдет, если фреймворки решат, что его кэш необходимо очистить (по какой-либо причине, хотя, скорее всего, недостаточно памяти)? Я просто застрял с мертвым указателем?

edit: причина, по которой я спрашиваю, не в том, что я планирую использовать imageName, а в дублировании его основных функций в моем собственном классе управления ресурсами.

Ответы [ 4 ]

4 голосов
/ 23 июля 2010

Пока вы сохраняете изображение, оно не будет удалено из кэша.Кэширование помогает, если вы снова используете imageNamed перед чисткой и у вас больше нет активных указателей на изображение.В этом случае вы просто вернете изображение обратно без необходимости его перезагрузки.Apple наконец-то раскрыла эту функцию для использования в наших собственных приложениях с NSCache

1 голос
/ 23 июля 2010

Он загрузит новое изображение для вас.Вот документация:

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

UIImage imageNamed:

1 голос
/ 23 июля 2010

Насколько я понимаю, проблема "autocache" с imageNamed заключается в том, что когда вы открываете изображение с помощью UIImage :: imageNamed, оно кэшируется системой и никогда не выпускается. Вот почему Apple рекомендует использовать UIImage :: imageWithContentsOfFile для изображений, которые используются время от времени. Для изображений, которые очень часто используются в пользовательском интерфейсе, imageNamed - ОК.

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

1 голос
/ 23 июля 2010

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

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