Подтвердить что ты не робот

Имитировать предупреждения памяти из кода, возможно?

Я знаю, что смогу имитировать предупреждение о памяти на симуляторе, выбрав "Имитировать предупреждение памяти" в раскрывающемся меню iPhone Simulator. Я даже могу сделать для этого горячую клавишу.

Но это не то, чего я хотел бы достичь. Я бы хотел сделать это из кода просто, скажем, делать это каждые 5 секунд. Возможно ли это?

4b9b3361

Ответ 1

Это довольно легко на самом деле, однако он полагается на недокументированный вызов api, поэтому не отправляйте его с ним (даже если он находится в недоступном пути к коду). Все, что вам нужно сделать, это: [[UIApplication sharedApplication] _performMemoryWarning];

Этот метод будет иметь объект приложения UIApplication после UIApplicationDidReceiveMemoryWarningNotification и вызвать метод applicationDidReceiveMEmoryWarning: в делетете приложения и всех

UIViewController
-(IBAction) performFakeMemoryWarning {
  #ifdef DEBUG_BUILD
    SEL memoryWarningSel = @selector(_performMemoryWarning);
    if ([[UIApplication sharedApplication] respondsToSelector:memoryWarningSel]) {
      [[UIApplication sharedApplication] performSelector:memoryWarningSel];
    }else {
      NSLog(@"Whoops UIApplication no loger responds to -_performMemoryWarning");
    }
  #else
    NSLog(@"Warning: performFakeMemoryWarning called on a non debug build");
  #endif
}

Ответ 2

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

on run
repeat 100 times
    tell application "System Events"
        tell process "iOS Simulator"
            tell menu bar 1
                tell menu bar item "Hardware"
                    tell menu "Hardware"
                        click menu item "Simulate Memory Warning"
                    end tell
                end tell
            end tell
        end tell
    end tell
    delay 0.5
end repeat
end run

Ответ 3

Отправьте уведомление UIApplicationDidReceiveMemoryWarningNotification в центр уведомлений по умолчанию:

[[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidReceiveMemoryWarningNotification object:nil]

Ответ 4

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