Próbuję naprawić kilka przecieków, które powoduje mój UIWebView
i nie można znaleźć ich pochodzenia ani obejścia. Co mogę zrobić, to uzyskiwanie niektóre treści z sieci za pomocą polecenia sieciowego, a następnie zmontować mój HTML i załadować go w locie:Wycieki pamięci za pomocą UIWebView i Javascript
NSString* body = <some HTML>;
NSString* html = [NSString stringWithFormat:kHTMLTemplate, [self scripts], [self styles], body];
[_webView loadHTMLString:html
baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];
każdym razem jest dostępna nowa treść, mogę wykonać loadHTMLString
ponownie, aby odświeżyć widok internetową . Ponownie używam tego samego widoku internetowego, tego samego kontrolera, tego samego wszystkiego.
Instruments wykazuje bardzo dziwny wzór, w którym wszystkie obiekty są wyciekły Ogólne bloki o różnych rozmiarach i żaden z nich wszelkie informacje z nim związane: brak odpowiedzialnego biblioteka, nie odpowiedzialny ramki, itp Każdy czas jest wykonywany loadHTMLString
, nowe przecieki są dodawane.
Wygląda na to, że istnieje kilka wątków w S.O. około UIWebView
wyciek pamięci. Próbowałem wszystkich znalezionych sugestii (np. Ustawiającna zero lub resetując go, próbowałem zwolnić istniejący interfejs UIWebView i przydzielić nowe za każdym razem, gdy mam nowe dane itd.), Ale nic nie pomogło.
Moje dochodzenia do tej pory prowadzą do jednoznacznego wyniku: wydaje się, że wycieki są obecne tylko wtedy, gdy HTML załadowany do widoku zawiera trochę kodu Javascript. Jeśli zauważysz powyższy ciąg html
, składa się on z kilku komponentów; jeden jest [self scripts]
która to funkcja, która zwraca po prostu:
return @"<script type='text/javascript' src='jquery-1.4.4.min.js'></script>"
"<script type='text/javascript' src='jmy.js'></script>";
Jeśli usunąć ten brak przecieków istnieją. Ale przecieki pojawiają się, gdy dodam znacznik <script>
do mojego kodu HTML. nawet jeśli pojawiają się one po prostu dołączyć plik jquery (lub dowolny inny plik js, jak do tego):
return @"<script type='text/javascript' src='jquery-1.4.4.min.js'></script>";
Więc pytanie: ma ktoś pomysł o tym, co się tu dzieje? Oczywiście włączenie pliku JavaScript do mojego kodu HTML powoduje, że pamięć wycieku UIWebView
jest niedostępna.
Fakt, że pojawiają się przecieki zarówno kiedy używać tego samego UIWebView
obiektu lub kiedy wystąpienie nowego jeden za każdym razem mam treści, skłania mnie do myślenia, że coś musi być w sposób pliki JavaScript są obsługiwane przez loadHTMLString
co prowadzi do przecieków.
Czy ktoś wie, jak to naprawić?
To może być błąd w usłudze UIWebView. http://blog.techno-barje.fr/post/2010/10/04/UIWebView-secrets-part1-memory-leaks-on-xmlhttprequest/ –
@ H2CO3: dzięki, spróbowałem też ... bez ulepszeń. .. – sergio
Myślę, że jesteśmy zapisywani przez iOS 8. Sprawdź tę odpowiedź na WKWebView http://stackoverflow.com/questions/16514230/massive-memory-leak-in-ios-uiwebview –