Wenn Ihr iOS-App eine Received memory warning
Benachrichtigung erhält, iOS so viel Speicher zurückzugewinnen versucht, wie es kann, weil einige App es braucht . Diese App könnte Sie sein, oder es könnte jemand anderes sein. In diesem Fall erhalten alle derzeit ausgeführten Apps (nicht nur Ihre) diese Benachrichtigung, und jede App sollte darauf reagieren, indem sie soviel ungenutzten Speicher wie möglich freigibt. Da Javascript seine eigene Speicherverwaltung ausführt, kann eine Cordova-App wirklich Dereferenzierung von Speicher durch Setzen von Variablen auf null (oder einen kleinen Wert), also myHugeGlobalObject = null;
, myArrayOfOneMillionThings = [];
, usw., so dass der Garbage Collector dann den Speicher freigeben kann Mal läuft es. Also, wenn Sie eine Received memory warning
Benachrichtigung erhalten, sollten Sie das tun.
In CDVPlugin.m, würden Sie so etwas wie dies tun, um die iOS Benachrichtigung an die Javascript App zu liefern:
- (void)onMemoryWarning
{
// override to remove caches, etc
NSLog(@"CVPlugin.m: Got onMemoryWarning notification");
NSString * javascriptString = @"yourJSFunctionToManageMemoryWarnings();";
[self.webView stringByEvaluatingJavaScriptFromString:javascriptString];
}
und dann in Ihrem Javascript (in index.html
, sagen wir mal):
<script>
function yourJSFunctionToManageMemoryWarnings() {
console.log("yourJSFunctionToManageMemoryWarnings() was called");
myHugeGlobalObject = null;
myArrayOfOneMillionThings = [];
}
</script>
Es klingt wie in Ihrem speziellen Fall iOS versucht, Speicher verfügbar zu machen, weil es Ihre App ist, die es benötigt (um die Kartenansicht zu laden) und was Sie tun würden, was Sie normalerweise tun würden: freien Speicher als oben beschrieben, und wenn alle Auch sonst tut es höflich dasselbe, du wirst dein Gedächtnis bekommen.
Wenn Sie feststellen, dass sich bei dem Versuch, die Kartenansichten zu laden, eine andere Art von Speichermangel als hier beschrieben ergeben, sollten Sie in einige erweiterte Javascript-Speicherverwaltungstechniken wie Objektpooling() schauen), wo Sie im Grunde alle Speicher, die Sie erwarten, die Sie beim Start benötigen, greifen und dann wissen Sie, dass Sie es haben werden, wenn Sie es brauchen.
Haben Sie versucht, die Dev Tools auf Safari zu verbinden und die Speicherausgabe zu überprüfen? Normalerweise ist es mit großen Bildern oder starker Verwendung von gemischtem CSS verbunden. – Max
Dieses Speicherproblem bekomme ich in iPhone-Gerät.Wie kann ich dies mit Safari-Tools verwenden? Können Sie bitte erklären, das Verfahren zu überprüfen – Sujania
Werfen Sie einen Blick auf http://appletoolbox.com/2014/05/use-web-inspector -debug-mobile-safari/ – Max