UIWebView prend beaucoup de mémoire
Dans mon application, lorsque je charge UIWebView
avec toutes les url du Site web de la mémoire des sauts de 30 mo pour environ 140 mo;
Je suis à l'aide de l'ARC
et lors du rejet de la UIWebViewController
[Viewcontroller
qui contient UIWebView], il ne libère la mémoire.
Tout organisme peut m'aider comment faire pour résoudre ce problèmes de mémoire ainsi que veuillez également me fournir des pointeurs de la mémoire bestpractices dans ARC
Pour le chargement de la page web :-
NSURL *nsurl=[NSURL URLWithString:self.url];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[webview loadRequest:nsrequest];
Pour écarter la Viewcontroller:-
[self dismissViewControllerAnimated:YES completion:^{
webview.delegate=nil;
webview=nil;
}];
Merci d'Avance 🙂
source d'informationauteur DAMM108
Vous devez vous connecter pour publier un commentaire.
wow, aujourd'hui, nous avons également rencontrer ce problème. quand nous essayons de charger une page web qui contient beaucoup de photos ou d'un énorme page web, il est facile de s'écraser. nous trouvons également la mémoire utilisée près de 200M.
enfin, nous constatons que nous pourrions supprimer la mémoire cache de la vue web
vous pouvez essayer lorsque vous recevez l'avertissement de mémoire. ou vous pouvez appeler la méthode dealloc.
si il reste encore quelques problèmes, essayez de limiter la mémoire taille de la mémoire cache par appel
bonne chance!
Ne pas les écouter,
Ce n'est pas un problème, le téléphone peut gérer l'utilisation de la mémoire, essayez d'utiliser une MKMapView et de surveiller votre utilisation de la mémoire de monter en flèche.
Dans votre simulateur, essayez de mettre à travers un avertissement de mémoire faible
cmd+shift+m
et voir ce qui se passe, vous ne pouvez pas attendre de tous les points de vue courir à la même utilisation de la mémoire, vous devez également donner une chance pour que votre téléphone tampon.iPhones pouvez gérer cela, alors vous ne devriez pas vous soucier de lui.
Mais essayez quand même:
Le comportement de UIWebViews changements si vous décochez la case "Détecte les Liens" dans le fichier nib, alors essayez de basculement et voir ce qui se passe.
UIWebViewController
vivre dans la mémoire. (Cmd + I dans Xcode, laissez Instruments ouvert, sélectionnez les Allocations, et le type UIWebViewController dans la barre de recherche)UIWebViewController
objet auplus d'un endroit.
Il n'y a pas de sens à la recherche d'un problème jusqu'à ce que vous êtes sûr que le problème existe.
Il y a deux possibilités pour laquelle l'utilisation de la mémoire est si élevé:
1.UIWebView n'est pas libéré.
2.C'est un système de mise en cache ou certains iOS mémoire de l'algorithme de traitement.
Dans le second cas, vous ne pouvez rien faire. Pour vérifier le premier cas, vous pouvez essayer d'utiliser des instruments ou tout simplement sous-classe UIWebView et ajouter de la journalisation pour la méthode dealloc.
Ne pas oublier de changer UIWebView à MyUIWebView dans votre code.
Et seulement si, vous serez sûr que UIWebView n'est pas libérée, vous devriez commencer à chercher pour de fortes présomptions, de conserver des cercles et ainsi de suite.
ajouter
avant cette ligne
néant ing votre webView doit être pris en charge par l'ARC. Ne vous référez pas à la vue web dans la réalisation du bloc.
Je pense que vous avez oublié de retirer la UIWebView à partir de la vue de la hiérarchie. Ce serait la cause d'un supplément de conserver le comte et éviter la mémoire est récupérée lorsque vous néant suite la propriété.
Juste quelques choses que vous devez vérifier:
strong
référence à sonview
et de ce point de vue, il conserve tous les sous-vues aussi longtemps que vous le garder à l'intérieur de la vue de la hiérarchie, de sorte que toutes les propriétés supplémentaires devraient êtreweak
y compris votrewebView
propriété.nil
" tout ce. ARCnil
tous sesstrong
références àdealloc
automatiquement.weak
références ni. En outre sur iOS 5+weak
références devenirnil
automatiquement si l'objet référencé obtient libéré quelque part d'autre.Je pense que le plus probable que votre tout-vue-contrôleur est arriver a conservé quelque part, et donc de ses
view
et lawebView
.Assurez-vous de garder uniquement
weak
références au contrôleur qu'il soit retenu par un conteneur ou de la présentation de contrôleur de sorte qu'il devient automatiquement libéré en tant qu'il reçoit sauté ou rejeté.J'ai eu le même problème dans mon application. Je recommande que vous devriez utiliser WKWebView. WKWebView a été introduit avec iOS 8.
Vous pouvez en lire plus à ce sujet ici
la documentation d'apple
La question de la mémoire est définitivement résolu. Vous obtiendrez toutes les fonctionnalités de la webview et un peu plus(c'est à dire le progrès). Espérons que cela aide
Si vous voulez réduire l'utilisation de la mémoire de UIWerview immédiatement, vous pouvez essayer:
1.
ou
2.
ou
3.
Il a travaillé pour moi.