Разработка iOS: как я могу вызвать предупреждения о низкой памяти на устройстве?

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

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

Ответ 1

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

Вы также можете создать отдельное приложение, которое делает что-то подобное, и предназначено для работы в фоновом режиме, если вы хотите легко повторно использовать это и/или протестировать несколько приложений.

Ответ 2

Вы можете вызвать частный метод:

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

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

Ответ 3

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

Ответ 4

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

Чтобы использовать Инструменты в своем приложении из Xcode, используйте пункт "Продукт → Профиль".

Ответ 5

Я переписал ответ Enzo Tran в Swift:

UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)

Ответ 6

Создает команду меню, которая будет вызывать его.

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

Ответ 7

Преобразован @ChikabuZ в быстрый 3:

UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)

Ответ 8

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

let d = Data.init(repeating: 100, count: 1200000000)
  • Это полезно для запуска предупреждения в других приложениях

Ответ 9

Если кто-то по какой-либо причине пытается это сделать в 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;
   }

Ответ 10

Swift 4:

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

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