2015-07-15 6 views
7

Kann mir jemand bitte sagen, wie Speicherverwaltung in iOS Cordova basiertes Projekt mit „Received Speicher Warnung“Umgang mit Speicherverwaltung und in iOS Cordova Projekt?

Ich erhalte diese Warnung in iOS Cordova Projekt zu handhaben, wenn auf meinem iPhone oder iPad (Version 8.1) läuft. Ich verwende CDVlocation für Geolocation in meiner App. Ich erhalte hauptsächlich diese Nachricht beim Laden von kartenbasierten Ansichten. Ich verwende ein ARC-basiertes Xcode-Projekt.

Jede Hilfe bei der Verwaltung von Speicherwarnungen mit cordova "Received memory warning" wird geschätzt.

Danke alle

+0

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

+0

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

+0

Werfen Sie einen Blick auf http://appletoolbox.com/2014/05/use-web-inspector -debug-mobile-safari/ – Max

Antwort

4

auf diese Weise versuchen in CDVPlugin.m

- (void)onMemoryWarning 
{ 
    // override to remove caches, etc 
    NSLog(@"onMemoryWarning"); 
    NSString * javascriptString = @"yourJSFunctionToManageMemoryWarnings();"; 
    [self.webView stringByEvaluatingJavaScriptFromString:javascriptString]; 
} 
+0

Ich benutze bereits dieses Stück Code – Sujania

+0

@Sujania Wenn Sie dieses Stück Code verwenden, haben Sie die Funktion 'yourJSFunctionToManageMemoryWarnings()' in Ihrem Javascript implementiert und machen Sie dann die Dinge, die Sie brauchen zu tun, um Ihren Speicherbedarf in dieser Funktion zu reduzieren? –

+0

@Mike Nr.Ich habe dies nicht implementiert .. Danke ... – Sujania

1

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.