2010-09-22 5 views
0

Dans mon App J'ai un grand problème de mémoire
ajouter UIScrollView avec une vue dynamique viewController quand j'ai besoin
et je supprimer correctement la viewController pendant le défilement.
et que viewController j'ai placé un UIWebiew dans IBOutlet et la charge WebView commeproblème de mémoire UIWebView

[m_objWebView loadRequest:[NSURLRequest requestWithURL: 
        [NSURL URLWithString:@"http://stackoverflow.com/"]]]; 

et de libération UIWebView dans viewControllers dealloc

- (void)dealloc { 

m_objWebView.delegate=nil; 
[m_objWebView stopLoading]; 
[m_objWebView release]; 
m_objWebView=nil; 

[[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

[super dealloc]; 
} 

mais après 5/6 minutes de plantage de mon application après avertissement de la mémoire.

Maintenant je change le code que j'ajoute directement uiwebview à uiscrollview et charge paresseux de trois webviews. maintenant la fuite de mémoire réduit mais il est toujours là. mais maintenant j'ai un autre problème que lorsque l'utilisateur balaye rapidement il y a un retard dans le chargement du contenu web de toute façon pour résoudre ce problème?

aide-moi grâce à l'avance

+0

Comment créez-vous la vue Web? Pourquoi ne relâchez-vous pas 'view'? –

Répondre

2

Retrait subviews à la vue d'un UIViewController dans le dealloc est inutile. La propriété view et toutes ses sous-vues seront automatiquement libérées en tant que propriétaire (le UIViewController) est libéré. Tout ce que vous devez faire est de libérer toutes les propriétés que vous avez conservées. En supposant que vous avez déclaré m_objWebView comme @property (nonatomic, conserver) IBOutlet UIWebView * m_objWebView, tout ce dont vous avez besoin est:

- (void)dealloc { 

m_objWebView.delegate=nil; 
[m_objWebView stopLoading]; 
[m_objWebView release], m_objWebView=nil; 

[super dealloc]; 
} 

Alors, je vous suggère de regarder dans quand et où vous conserviez/libérer le viewController, C'est là que vous pouvez encore optimiser les choses. En ce qui concerne le retard dans le chargement du contenu web, c'est l'inconvénient du chargement paresseux: la paresse garde au minimum la consommation de la mémoire, mais, comme le terme l'indique, elle n'est pas rapide.

+0

remercie Elise van. Est-il possible de pré-charger UIwebview? avec le contenu loacl dans le dossier –

+0

Comme j'ai écrit la réponse, je me demandais la même chose. Je suppose que si vous connaissez l'url (s) à l'avance, vous pouvez mettre en cache la vue avec NSKeyedArchiver/NSKeyUnarchiver. Mais alors vous auriez à comprendre quand et comment vérifier le nouveau contenu. D'un autre côté, peut-être que le kit WebView a des méthodes qui traitent exactement de ce problème - je ne connais pas assez UIWebView, NSURL et ses frères pour vous conseiller à ce sujet. Bonne chance. –