Попытка поместить ваше приложение в память - проигрышная игра. Это приведет вас к странным путям, чтобы попытаться выяснить, на каком устройстве вы работаете, обменяться ресурсами на основе этого и т. Д. И т. Д. И т. П.
Лучший вариант - спроектировать структуру памяти так, чтобы она поддерживала канаву, а затем поддерживать довольно жесткий режим канавы, когда вы получаете уведомление о нехватке памяти. Идите вперед и используйте память - это для этого - и пусть предупреждение о нехватке памяти станет вашим сигналом для удаления неиспользуемых ресурсов.
Многие люди, кажется, чувствуют себя плохо из-за того, что их приложение генерирует предупреждения памяти. Это глупо. Шаблон дизайна - ешьте сколько хотите, но отвечайте соответствующим образом, когда вам говорят, что у вас избыточный вес. Учитывая, что вы работаете с широким спектром устройств с широким диапазоном профилей памяти (например, iPhone 3G имеет 1/4 ОЗУ от iPhone 4), лучший способ - просто быть чувствительным к тому моменту, когда вы заполнили память.
Основным препятствием, с которым вы столкнетесь, будет восстановление после сброса данных. Я считаю, что лучше всего явно установить объекты UIImage на nil
, а затем проверить их на nil перед их использованием, перезагрузить их из комплекта или сети или любого другого, если это необходимо.
Все это говорит: [UIImage imageNamed:]
поддерживает канаву, но вы не можете ее контролировать. Когда подкласс UIViewController получает предупреждение о памяти, он откажется от кэшированных UIImages, которые вы создали с помощью этого метода, но ничего, что вы можете сделать, не заставит их исчезнуть до тех пор. Даже назначение чего-то крошечного для рассматриваемого UIImage не поможет, потому что оно кэшируется, связанное с «именем», которому оно «Именовано», а не с объектом, которому оно назначено. Так что этот метод хорош для изображений, которые вы собираетесь многократно использовать, но даже в этом случае он будет сокращен, когда придет время, и вам нужно будет ответить соответствующим образом.