Я получил предупреждение памяти и мое приложение упало.Это убивает объекты автоматического выпуска? - PullRequest
0 голосов
/ 01 апреля 2012

Я получил два предупреждения памяти. Это не показывает уровень предупреждения. Показывает краткую фразу:

Received memory warning.
Received memory warning.

Я получил предупреждение памяти и через несколько секунд мое приложение упало. Мое приложение зависло, потому что я получил предупреждение памяти

Я знаю, что уровень предупреждения памяти 2 убивает объекты автоматического освобождения. Убивает ли предупреждение памяти без указания уровня объекты автоматического освобождения?

Ответы [ 3 ]

2 голосов
/ 01 апреля 2012

Вы работаете с MRC? В этом случае при получении предупреждения о памяти будут вызываться методы dealloc для освобождения всех необходимых представлений и объектов для освобождения некоторой памяти.

Проверьте, что все правильно освобождается в dealloc.

Объекты автоматического высвобождения автоматически освобождаются, когда ваше приложение выходит за их рамки.

1 голос
/ 01 апреля 2012

объекты автоматического выпуска не всегда освобождаются сразу

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

если это .. просто распределите и освободите объекты для решения проблемы с памятью

0 голосов
/ 15 мая 2015
  1. Использование виртуальной памяти iOS не использует файл подкачки, но поддерживает виртуальную память.Если приложение хранит много данных в памяти для произвольного доступа (например, словарь в Letter Blocks 3D), вы хотите организовать его как файл карты, а не загружать его в ОЗУ с помощью malloc ().Самый простой способ сделать это - вызвать NSData initWithContentsOfMappedFile:

  2. Избегать укладки автоматически высвобождаемых объектов. Когда вы создаете экземпляры таких объектов, как NSString, без явного выделения, они живут до освобождения пула автоматического выпуска - обычно доваше приложение закрывается.Широкое использование таких методов может привести к большому количеству мусора в оперативной памяти.Используйте NSString initWithContentsOfFile: чтобы позже можно было освободить его вместо NSString stringWithContentsOfFile:.То же правило применяется к UIImage imageNamed: - это не рекомендуется использовать для загрузки изображений.

  3. Обработка предупреждений памяти Выгрузите ненужные ресурсы при обработке предупреждений памяти.Даже если вы не можете выгрузить какие-либо вещи, вызовите [super didReceiveMemoryWarning] во всех ваших UIViewControllers.По умолчанию это освобождает некоторые ресурсы, такие как элементы управления пользовательского интерфейса, для сторонних представлений.Отказ от обработки этого события может привести к тому, что iOS решит, что ваше приложение заслуживает убийства.

  4. Рассмотрим ограниченное использование переходов с анимированным представлением. Анимации, такие как переворот, при запуске вызывают всплески использования ОЗУ.Эта функция очень удобна и должна использоваться во многих случаях, но она может вызвать предупреждения памяти в сильно загруженной многозадачной среде.В частности, мы настоятельно рекомендуем избегать анимации представлений OpenGL.

  5. Проверка объема памяти на устройстве Используйте инструменты для тестирования.Наиболее полезными инструментами являются Allocations, Leaks и Activity Monitor.Тестирование на симуляторе в большинстве случаев не актуально, так как его объем памяти имеет тенденцию быть совершенно другим.Проведя тестирование, вы сможете выяснить, сколько оперативной памяти использует каждая часть вашего приложения, где существуют узкие места и как можно оптимизировать.

От: http://surgeworks.com/blog/lab-mobile/iphone/5-tips-to-reduce-memory-issues-in-ios-apps

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