25 Stimmen

Speicherwarnungen aus dem Code simulieren, möglich?

Ich weiß, dass ich eine Speicherwarnung im Simulator simulieren kann, indem ich im Dropdown-Menü des iPhone-Simulators "Speicherwarnung simulieren" auswähle. Ich kann sogar eine Tastenkombination dafür erstellen.

Aber das ist nicht das, was ich erreichen möchte. Ich möchte, dass aus dem Code zu tun, indem einfach, sagen wir es alle 5 Sekunden. Ist das möglich?

59voto

Brad The App Guy Punkte 16245

Es ist eigentlich ziemlich einfach, aber es beruht auf einem undokumentierten API-Aufruf, also liefern Sie Ihre App nicht damit aus (auch wenn es in einem unzugänglichen Codepfad liegt). Alles, was Sie tun müssen, ist die Verwendung von [[UIApplication sharedApplication] _performMemoryWarning]; .

Bei dieser Methode wird die Methode der App UIApplication Objekt die UIApplicationDidReceiveMemoryWarningNotification und rufen Sie die applicationDidReceiveMemoryWarning: Methode auf dem App-Delegaten und alle UIViewControllers .

-(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
}

5voto

Vic320 Punkte 1105

Ich habe ein Apple-Skript geschrieben, das den Simulator mit Speicherfehlern bombardiert. Es ist ein bisschen extrem, aber wenn Ihr Code überlebt, können Sie zuversichtlicher sein...

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

4voto

Bill Punkte 41090

Beitrag a UIApplicationDidReceiveMemoryWarningNotification Benachrichtigung an das Standardbenachrichtigungszentrum:

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

1voto

Alex Reynolds Punkte 93906

Einfach alloc-init große Objekte in einer Schleife und lassen sie nie wieder los. Das sollte ziemlich schnell eine Speicherwarnung auslösen, würde ich mir vorstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X