Разработка под iOS: как вызвать предупреждения о нехватке памяти на устройстве? - PullRequest
81 голосов
/ 17 января 2011

Я хотел бы хорошо протестировать свои приложения в условиях нехватки памяти, но это сложно проверить. Как я могу вызвать предупреждения о нехватке памяти, которые вызывают метод didReceiveMemoryWarning в моих представлениях, когда приложение работает на устройстве, а не на симуляторе? Или как я могу протестировать свое приложение в этих возможных условиях?

Причина, по которой я не могу использовать симулятор, заключается в том, что мое приложение использует Game Center и приглашения не работают на симуляторе.

Ответы [ 10 ]

270 голосов
/ 04 января 2012

Вы можете вызвать закрытый метод :

[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];

Просто не забудьте использовать его только при отладке, иначе ваше приложение будет отклонено.

22 голосов
/ 17 января 2011

Пункт меню Simulate Memory Warning в iOS Simulator позволяет имитировать предупреждение о памяти.

19 голосов
/ 03 июля 2015

Используя Инструменты, используйте пункт меню: Инструмент -> Предупреждение симуляции памяти.

Чтобы использовать Инструменты в своем приложении из Xcode, используйте пункт меню Product -> Profile.

8 голосов
/ 15 марта 2016

Я переписал Ответ Энцо Трана на Свифте:

UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)
7 голосов
/ 24 апреля 2017

Преобразован @ChikabuZ в swift 3:

UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)
7 голосов
/ 17 января 2011

Theres команда меню, которая вызовет его.

Hardware > Simulate Memory Warning с симулятора.

6 голосов
/ 17 января 2011

Чтобы протестировать на устройстве, просто добавьте некоторый код, который периодически выделяет большие куски памяти, не освобождая его (т. Е. Утечка намеренно).Вы можете сделать это в отдельном потоке, или в ответ на таймер, или используя любой механизм, который наилучшим образом позволяет вам тестировать и наблюдать за поведением вашего приложения.делает что-то подобное и предназначен для работы в фоновом режиме, если вы хотите легко использовать это повторно и / или тестировать с несколькими приложениями.

4 голосов
/ 26 февраля 2018

Если кто-то по какой-либо причине попытается сделать это в Swift 4 - вот как выделить 1,2 ГБ оперативной памяти.

let d = Data.init(repeating: 100, count: 1200000000)
3 голосов
/ 25 августа 2017

Если кто-то по какой-либо причине попытается сделать это в Swift 3 - вот как выделить 1,2 ГБ оперативной памяти.

   for i in 0...1200 {
      var p: [UnsafeMutableRawPointer] = []
      var allocatedMB = 0
      p.append(malloc(1048576))
      memset(p[allocatedMB], 0, 1048576);
      allocatedMB += 1;
   }
1 голос
/ 11 января 2018

Swift 4:

UIApplication.shared.perform (Selector (( "_ performMemoryWarning")))

Может выполнить вышеуказанное в ответ на событие / уведомление.

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