* ПРИМЕЧАНИЕ. Этот ответ относится только к iOS 4.1 и ниже. Проблемы, описанные в этом ответе, были в основном исправлены в iOS 4.2 *
Я занимался этим, поскольку мое приложение использует как карту, так и другие функции, требующие большого объема оперативной памяти.
Я не нашел ответа, но есть обходной путь. Требования к памяти MKMapView увеличиваются по экспоненте, когда вы приближаетесь к области и перемещаетесь в пределах этой увеличенной области.
Существует два уровня кэша плиток MKMapView. Один проявляет себя как Malloc ~ 196kb в инструментах, другой - NSData (хранилище) разных размеров.
Malloc, похоже, является активными используемыми тайлами, и существует жесткое ограничение на их количество. В моем приложении это число 16, не уверен, основано ли оно на размере UIView или нет. Кажется, что эти распределения строго управляются, и это отвечает на предупреждения памяти.
В любом случае, при определенном уровне масштабирования, скажем, уровне континента (достаточном для того, чтобы вместить большую часть Северной Америки на экране iPad), учитывая размер фрагментов, если вообще никогда не нужно переходить на этот второй уровень кэширования (NSData (Магазин)), чтобы завершить карту. Все свежее и чистое. Если я загружаю тонну внешних изображений в активную память, плитки сокращаются. Отлично!
Проблема возникает, когда он достигает второго уровня кэширования. Это происходит, когда вы увеличиваете изображение, и внезапно вместо 16 плиток, чтобы показать весь планет, ему нужно 16 плиток, чтобы просто показать Лос-Анджелес, и, когда вы перемещаетесь, вместо того, чтобы просто сбросить эти старые плитки, они помещают их в NSData ) ассигнования, где они, кажется, никогда не освобождаются.
Этот NSData (хранилище) является NSURLConnectionCache, который по умолчанию существует только в памяти. Вы не можете получить доступ к этому кешу, чтобы ограничить его, потому что это не общий кеш по умолчанию (уже пробовал).
Так вот где я застрял.
Неудовлетворительный ответ заключается в том, что если вы отключите масштабирование карты и установите его на достаточно широком уровне масштабирования, вы сможете полностью избежать этой проблемы, но, очевидно, это требуется некоторым приложениям ... и это, насколько я понял.
Я подал заявку в службу поддержки Apple, чтобы узнать, могут ли они разглашать каким-либо образом ограничить этот нелепый кеш для карты (который, кстати, мне удалось случайно увеличить до 50+ мегабайт ОЗУ, выделенных в активной памяти).
Надеюсь, это поможет.
редактировать
Следующий релиз iOS, похоже, решил эту проблему с неограниченным кешем. MKMapView теперь активно сокращает свои кэшированные данные тайлов. Радуйся