Может кто-нибудь мне помочь? мое приложение вылетает при прохождении, у меня был отключен NSZombies, и у меня также был этот код
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
}
Но мое приложение все еще вылетает. Приложение содержит изображения и некоторые веб-просмотры, которые загружают локальные изображения. Пожалуйста, объясните мне, как оптимизировать приложение, чтобы избежать сбоев.
Заранее спасибо
3 ответа
Я каким-то образом нашел способ увеличить использование памяти, мне просто нужно выполнить removeAllCachedResponses для каждого viewDidLoad ViewControllers, потому что didReceiveMemoryWarning был довольно поздно или откладывался для очистки кешированных ответов при срабатывании предупреждения о памяти, это может не выглядеть хорошо в коде, но это мешает хранить и пополнять память и кеши. Я все еще не могу назвать это решением, но это каким-то образом эффективный превентивный метод предотвращения утечки памяти.
removeAllCachedResponses
не требуется. Используйте инструменты для проверки утечек.
На скриншоте видно несколько ошибок:
Приложение было убито системой, потому что вы выделяете слишком много памяти.
Использование памяти
261.4MB
- это слишком много! Вы говорите, что загружаете локальные изображения. Убедитесь, что эти изображения как можно меньше (в пикселях) и хранятся в памяти только до тех пор, пока они необходимы для текущего просмотра. Здесь много дискуссий о том, как это сделать. Если вы не нашли решения, опубликуйте новый вопрос со своим кодом, указав, сколько изображений и их размер в пикселях, используете ли вы ARC или нет, а также что вы пытались это исправить. . Используйте инструмент Allocations Instruments из Xcode, чтобы узнать, где в вашем коде вы выделяете слишком много памяти.Журнал консоли показывает множество проблем с ограничениями автоматического размещения.
Это тоже следует исправить. Задайте новый вопрос с более подробной информацией о такой проблеме, если вы не можете ее исправить. Здесь также много дискуссий по таким вопросам, которые должны помочь. Воспользуйтесь функцией поиска на этом сайте!
+[UIImage imageNamed:]
кэширует каждое изображение, которое он вам дает, и не сбрасывает предупреждение о памяти, поэтому вы можете сломать тонну памяти, если у вас много изображений, даже если вы используете только одно или несколько в время.
Когда вы закончите с выделенными объектами, явно установите для них значение nil, чтобы освободить память.
Даже если вы используете ARC, это ускорит очистку.
Похожие вопросы
Связанные вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.