ADMOB Fuite de memory?

J'utilise le langage Swift pour ADMOB chaque fois qu'une nouvelle publicité apparaît, ma memory augmente. Je pense qu'il y a une fuite. Sans ADMOB tout le rest est bon.

var inter: GADInterstitial override func viewWillAppear(animated: Bool) { inter = GADInterstitial() inter.delegate = self inter.adUnitID = "****" var request:GADRequest = GADRequest() request.testDevices = [ "***" ] inter.loadRequest(request) } 

Et j'utilise UIActionAlert pour afficher l'Interstitiel

 self.inter.presentFromRootViewController(self) 

Lien de rapport de memory:

https://www.dropbox.com/s/zjkt2f38rcy1ryr/Screenshot%202014-07-27%2020.17.18.png

Est-ce que je fais quelque chose de mal? J'utilise ARC. Puis-je forcer la publication de ces Interstitials par moi-même?

EDİT :

J'ai aussi essayé GADBanner . Je suis en train d'ouvrir l'application. Je ne fais rien d'autre et la memory augmente

 override func viewWillAppear(animated: Bool) { banner = GADBannerView() banner.delegate = self banner.adSize = kGADAdSizeSmartBannerPortrait banner.adUnitID = "****" var request:GADRequest = GADRequest() banner.rootViewController = self request.testDevices = [ "****" ] self.view.addSubview(banner) } 

https://www.dropbox.com/s/3gn3pq3s1w2gfdd/Screenshot%202014-07-27%2022.05.51.png

Vous devez appeler destroy() pour éviter les memory leaks sur les bannières et les annonces interstitielles. Les annonces interstitielles sont des objects à utilisation unique, vous devez donc les détruire. Les bannières publicitaires peuvent être réutilisées mais une fois utilisées, appelez destroy() .

Voir ceci pour reference .

Je pense que vous devez libérer la bannière en définissant le délégué à zéro. A partir de la documentation AdMob (voir https://developers.google.com/mobile-ads-sdk/docs/admob/ios/banner?hl=es ):

Notez que si vous implémentez votre délégué en tant qu'object distinct plutôt que sous-class GADBannerView, veillez à définir la propriété 'delegate' de GADBannerView sur nil avant de libérer la vue.

 - (void)dealloc { bannerView_.delegate = nil; // Don't release the bannerView_ if you are using ARC in your project [bannerView_ release]; [super dealloc]; } 

Dans votre cas, je pense que vous avez seulement besoin d'implémenter l'appel bannerView_.delegate = nil .

J'espère que ça aide.

J'ai trouvé que la meilleure pratique consiste à allouer le GADBannerView une seule fois, sinon il s'emstackra dans votre memory.

Ma solution est de stocker mon GADBannerView dans une class singleton et de l'allouer lorsque rootViewController de l'application charge (didLoad). Ensuite, vous pouvez l'utiliser n'importe où sans requestr à nouveau.

J'ai eu le même problème, bien qu'avec les annonces GADInterstitial AdMob. Énorme guillochage CPU de la fuite de memory. Le problème est que vous devez aller à votre controller racine réelle. Je suis en Objective C, mais fondamentalement, si vous êtes, disons, dans une hiérarchie de vue UITabBarController, alors essayez ceci:

 banner.rootViewController = (UITabBarController *)self.view.window.rootViewController 

Cette chose a résolu tous mes problèmes. Esperons que ça marche!