Подтвердить что ты не робот

Утечка памяти ADMOB?

Я использую язык Swift для ADMOB всякий раз, когда появляется новая реклама, моя память увеличивается. Я думаю, что есть Утечка. Без ADMOB все остальное в порядке.

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

И я использую UIActionAlert для отображения Interstitial

self.inter.presentFromRootViewController(self)

Ссылка на отчет памяти:

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

Я что-то делаю неправильно? Я использую ARC. Могу ли я принудительно выпустить этот Interstitials самостоятельно.

ИЗМЕНИТЬ

Я тоже пробовал GADBanner. Я просто открываю приложение; Я ничего не делаю и память растет

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

4b9b3361

Ответ 1

Вам нужно позвонить destroy(), чтобы избежать утечки памяти на баннерных и межстраничных объявлениях. Межстраничные объявления - это одноразовые объекты, поэтому вам придется их уничтожать. Баннерные объявления можно использовать повторно, но после их использования вызовите destroy().

См. это для справки.

Ответ 2

Я думаю, вам нужно освободить баннер, установив делегат на нуль. Из документации AdMob (см. https://developers.google.com/mobile-ads-sdk/docs/admob/ios/banner?hl=es):

Обратите внимание, что если вы реализуете свой делегат как отдельный объект, чем подкласс GADBannerView, вы должны обязательно установить Свойство делегирования GADBannerView для nil перед выпуском представления.

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

В вашем случае, я думаю, вам нужно всего лишь реализовать вызов bannerView_.delegate = nil.

Надеюсь, это поможет.

Ответ 3

Я обнаружил, что лучше всего выделить GADBannerView только один раз, иначе он будет накапливаться в вашей памяти.

Мое решение состоит в том, чтобы сохранить мой GADBannerView в одноэлементном классе и распределить его при загрузке приложения rootViewController (didLoad). Затем вы можете использовать его в любом месте, не запрашивая снова.

Ответ 4

У меня была такая же проблема, хотя с объявлениями GADInterstitial AdMob. ОГРОМНЫЙ CPU отторгает утечку памяти. Проблема в том, что вам нужно перейти к вашему фактическому контроллеру корневого представления. Я в Objective C, но в основном, если вы находитесь, скажем, в иерархии представлений UITabBarController, попробуйте это:

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

Это одна вещь решила все мои проблемы. Надеюсь, это сработает!