每当新广告出现时,我都会使用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来显示非页内广告
self.inter.presentFromRootViewController(self)
记忆报告链接:
我做错了吗?我正在使用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)
}
答案 0 :(得分:2)
您需要致电destroy()
以避免横幅广告和插页式广告上的内存泄漏。插页式广告是一次性使用的对象,因此您必须将其销毁。横幅广告可以重复使用,但一旦使用它们,请致电destroy()
。
答案 1 :(得分:1)
我认为您需要通过将委托设置为nil来释放横幅。 来自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
来电。
我希望这会有所帮助。
答案 2 :(得分:0)
我发现最好的做法是只分配一次GADBannerView,否则它会堆积在你的记忆中。
我的解决方案是将我的GADBannerView存储在单例类中,并在应用程序的rootViewController加载(didLoad)时分配它。然后你可以在任何地方使用它而无需再次请求。
答案 3 :(得分:0)
虽然使用了GADInterstitial AdMob广告,但我遇到了同样的问题。巨大的CPU从内存泄漏中流失。问题是您必须转到实际的根视图控制器。我在Objective C中,但基本上,如果你在UITabBarController视图层次结构中,那么试试这个:
banner.rootViewController = (UITabBarController *)self.view.window.rootViewController
有一件事解决了我的所有问题。希望它有效!