Размер файла изображения и объем памяти, который он потребляет при отображении, это две совершенно разные вещи.
Изображения, такие как JPEG и PNG, сжимаются.Когда они выводятся на экран, они не сжимаются.
Быстрое эмпирическое правило, позволяющее выяснить, сколько памяти будет занимать изображение при отображении:
memory consumed = (width * height) * 4
Пример изображения, которое2 КБ на диске, но 62 x 52 пикселя на самом деле потребляют 12 896 байт или 12 КБЯ полагаю, что образ, занимающий 4 МБ на диске, будет занимать намного больше, чем 4 МБ.
Проблема в том, что MFMailComposer отображает изображения в виде компоновки, когда вы добавляете их в качестве вложений и в результате они распаковываются., потребляя память.Таким образом, ваши 4 МБ изображений на самом деле потребляют намного больше, чем вы думаете.
Возможно, попробуйте отправлять только одно изображение за раз.Вы также должны осознавать, что вы выпускаете изображения и MFMailComposeViewController, когда вы закончите с ними, или это наверняка станет источником утечки.
Также помните о том, как вы изначально загружали своиизображений.Метод UIImage
imageNamed:
фактически кэширует изображения.Кэшированные изображения удаляются только при нехватке памяти, поэтому они могут некоторое время зависать, если вы не выходите за пределы.
Наконец, вы заметили, что вы видите потребление памяти в приборах,но вы действительно убедились, что это на самом деле проблема?Испытываете ли вы сбои приложения из-за нехватки памяти при тестировании приложения, когда оно не подключено к инструментам или отладчику?
Ни один корпус не идеален - и это относится и к Apple.В прошлом были документированные случаи, когда фреймворки Apple показывали утечки памяти (кеширование UIImage
просочилось в iOS 2.x), но я бы не стал так быстро обвинять фреймворки, когда вы заметите всплеск потребления памяти,Если инструмент утечек не показывает утечек, а анализатор не показывает никаких проблем, наиболее вероятным сценарием является то, что это просто потребление памяти, а не утечка.
Важно помнить, что устройства iOS неу меня нет гигабайт оперативной памяти, как у компьютеров.Вы должны быть консервативны с памятью, которую вы используете.Если это означает, что нельзя отправлять XX МБ изображений одновременно, то так и должно быть.