UIwebview Fuite
paddev
Membre
Bonjour,
quand je crée une webview pour aller sur your tube pour regarder une video , j'ai enormémént de fuite .
Voici le code de ma webview:
Je release bien ma webview dans le dealloc.
En fait quand la video est en marche , voici ce qu'indique Instruments:
Avez vous une solution pour mon problème.
J'ai l'impression qu'il y a un souci avec urlconnection car a chaque fois que je crée une webview dans mon appli pour afficher une page internet, au bout d'un moment l'appli plante car je reçois un "receive memory warning"...surtout quand je lit une video..
Merci
quand je crée une webview pour aller sur your tube pour regarder une video , j'ai enormémént de fuite .
Voici le code de ma webview:
NSString *htmlString = @"<html><head><meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = 212\"/></head><body style=\"background:#F00;margin-top:0px;margin-left:0px\"><div><object width=\"212\" height=\"172\"><param name=\"movie\" value=\"http://www.youtube.com/watch?v=1x8AnJAI6Go&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\"></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"http://www.youtube.com/watch?v=1x8AnJAI6Go&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\"type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"212\" height=\"172\"></embed></object></div></body></html>";<br /> <br /> [webViewFacebook loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"http://www.your-url.com"]];
Je release bien ma webview dans le dealloc.
En fait quand la video est en marche , voici ce qu'indique Instruments:
0 libsystem_c.dylib calloc<br /> 1 libdispatch.dylib dispatch_source_create$VARIANT$up<br /> 2 CFNetwork __CFURLCache::StartWorkerThreadAndOpenPersistentStore(__CFString const*, unsigned char)<br /> 3 CFNetwork __CFURLCache::SetDiskCapacity(long)<br /> 4 CFNetwork CFURLCacheSetDiskCapacity<br /> 5 Foundation -[NSURLCache setDiskCapacity:]<br /> 6 WebKit +[WebView(WebFileInternal) _setCacheModel:]<br /> 7 WebKit __+[WebView(WebFileInternal) _preferencesChangedNotification:]_block_invoke_16<br /> 8 WebCore HandleRunSource<br /> 9 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__<br /> 10 CoreFoundation __CFRunLoopDoSources0<br /> 11 CoreFoundation __CFRunLoopRun<br /> 12 CoreFoundation CFRunLoopRunSpecific<br /> 13 CoreFoundation CFRunLoopRunInMode<br /> 14 WebCore RunWebThread(void*)<br /> 15 libsystem_c.dylib _pthread_start<br /> 16 libsystem_c.dylib thread_start<br />
<br />Leaked Object # Address Size Responsible Library Responsible Frame<br />Malloc 128 Bytes,1 0x1c9880 128 Bytes libdispatch.dylib dispatch_source_create$VARIANT$up<br />
Avez vous une solution pour mon problème.
J'ai l'impression qu'il y a un souci avec urlconnection car a chaque fois que je crée une webview dans mon appli pour afficher une page internet, au bout d'un moment l'appli plante car je reçois un "receive memory warning"...surtout quand je lit une video..
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html
La gestion mémoire "automatique" est l'une des principales innovations de Xcode 4.2. Plus besoin de s'embêter à mettre des release/retain dans le code. Plus à chercher ces &§@ de fuites mémoire !
Je préfère encore faire les choses moi-même
Ca me donne un peu l'impression de ces gâteaux tout faits où y'a plus qu'à verser la poudre et rajouter du lait ou quoi... alors que c'est tellement plus sympa et meilleur (et pas plus compliqué) de faire le gâteau soi-même !
mais mon probleme n'est toujours pas resolu..
un coup de pouce serai le bienvenue
Le probleme arrive des que la video est sur play, dans un instrument il y a plein de drapeau noir qui s'affiche et il me met toujours ce leak:
je vois pas du tout comment m'en sortir.
Tu peux corriger les fuites mémoires de ton propre code, mais pas celles dans le code des autres !
Il ne faut pas croire que le code d'Apple, entre autres, est exempt de bogue de gestion mémoire.
ARC analyse TON code et place les release et retain où il faut. Ce qui explique totalement qu'il ne puisse pas régler les problèmes de libdispatch.
Pour finir, il arrive que l'analyseur statique se trompe. Un cas classique est celui d'un objet qui doit appeler une méthode déléguée, dans laquelle on en profite pour envoyer un release à l'objet. La gestion mémoire est correcte, mais l'analyseur dira le contraire.
J'ai mis une image de fond dans le 'morenavigationcontroller" qui bizarement disparait quand je reçois ce "memory warning" et ça c'est embetant voici d'ailleurs le code de ma class tabbar que j'ai crée pour pouvoir gerer l'orientation de certaine vue.
Qu'est ce qui peut faire que cette image disparaisse?
Et c'est bizarre ton code utilisant l'introspection (isKindOfClass) pour faire ton truc ?!
Before releasing an instance of UIWebView for which you have set a delegate, you must first set the UIWebView delegate property to nil before disposing of the UIWebView instance. This can be done, for example, in the dealloc method where you dispose of the UIWebView.
Cela dit je ne sais pas si cela corrige ton leak. Ce n'est peut-être pas un leak d'ailleurs. J'ai souvent des "leaks" affichés dans le code Apple, j'ai l'impression que ce sont des ressources uniques qui sont réservées quand tu en as besoin et qui ne sont libérées qu'à la fermeture de l'app.
Peut-etre que la méthode qu'utilise Instrument n'est pas adapté à suivre ce type d'allocations qui JE SUPPOSE même quand elles ne sont plus référencées par personne sont conservés pour des problèmes de perfs.
tu as un ex, un lien?