Утечка памяти 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]()
Ответы
Ответ 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
Это одна вещь решила все мои проблемы. Надеюсь, это сработает!