2015-07-15 18 views
7

kimse iOS Cordova "Alınan bellek uyarı"Bellek Yönetimi ve iOS Cordova projesinde mi çalışıyorsunuz?

iPhone veya iPad çalışırken iOS Cordova projesinde bu uyarıyı alıyorum (sürüm 8.1) ile tabanlı projeyi bellek yönetimini nasıl işleneceğini lütfen bana. Uygulamamda coğrafi konum için CDVlocation kullanıyorum. Temelde harita tabanlı görünümler yüklenirken bu mesajı alıyorum. ARC tabanlı bir Xcode projesi kullanıyorum

Cordova ile bellek uyarılarını yönetme konusunda herhangi bir yardım "Alınan bellek uyarısı" takdir edilecektir.

, iOS bazı uygulama ihtiyacı nedeniyle olduğu kadar bellek geri çalışıyor iOS uygulaması bir Received memory warning bildirimi aldığında tüm

+0

Dev Tools'ları Safari'ye bağlamayı ve bellek çıktısını kontrol etmeyi denediniz mi? Genellikle büyük görüntüler veya karışık CSS kullanımı ile bağlantılıdır. – Max

+0

Bu bellek sorunu iPhone cihazında alıyorum.Nasıl bunu safari araçları ile kullanabilir miyim? – Sujania

+0

incelemek için prosedürü açıklayabilir misiniz http://appletoolbox.com/2014/05/use-web-inspector -debug-mobile-safari/ – Max

cevap

4

CDVPlugin.m

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

Bu kod parçasını kullanıyorsanız bu kodu kullanıyorum – Sujania

+0

@Sujania, Javascript'inizde 'yourJSFunctionToManageMemoryWarnings()' işlevini uyguladınız ve sonra ihtiyacınız olan şeyleri yapıyor musunuz? Bu fonksiyonda bellek ayak izinizi azaltmak için ne yapmalı? –

+0

@Mike No..Bunu uygulamamıştım ... Teşekkür ederiz .. – Sujania

1

bu şekilde deneyin teşekkür ederim . Bu uygulama siz olabilirsiniz, ya da başka biri olabilir. Bu olduğunda, şu anda uygulamalar yürütmek (yalnızca sizinki değil) bu bildirimi alır ve her uygulama, mümkün olduğunca fazla kullanılmayan belleği boşaltarak yanıt vermelidir. Javascript kendi bellek yönetimini yaptığı için, bir Cordova uygulamasının gerçekten yapacağı değişkenler, değişkenleri null (veya bazı küçük değerler), yani myHugeGlobalObject = null;, myArrayOfOneMillionThings = [];, vb. Ayarlayarak, dereferans belleğidir. zaman çalışır. Yani, bir Received memory warning bildirimi aldığınızda, yapmanız gereken şey budur. CDVPlugin.m yılında

, kendi JavaScript uygulamasına iOS bildirim sunmak için böyle bir şey yapacağını: o zaman

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

ve JavaScript (index.html yılında diyelim):

<script> 
    function yourJSFunctionToManageMemoryWarnings() { 
     console.log("yourJSFunctionToManageMemoryWarnings() was called"); 
     myHugeGlobalObject = null; 
     myArrayOfOneMillionThings = []; 
    } 
</script> 

Özel durumunuza benziyor iOS, belleğe erişmeyi denediğinden (yani, harita görüntüsünü yüklemek için) ihtiyacınız olan uygulama olduğundan ve ne yapacağınızı, normalde yaptığınız şey gibi: kullanılmayan bellek yukarıda anlatıldığı gibi ve ne zaman Diğerleri de kibarca aynı şeyi yapar, hafızanı alırsınız.

Bu, harita görünümlerini yüklemeye çalışırken burada anlattığınız şeyin dışında bir tür bellek dışı koşulla karşılaşıyorsanız, nesne havuzu oluşturma gibi bazı gelişmiş Javascript bellek yönetimi tekniklerine bakmak isteyebilirsiniz (http://www.html5rocks.com/en/tutorials/speed/static-mem-pools/). temelde başlangıçta ihtiyacınız olan tüm belleği kaparsınız ve ihtiyacınız olduğunda buna sahip olacağını bilirsiniz.