【问题标题】:ADMOB Memory Leaking?ADMOB 内存泄漏?
【发布时间】:2014-09-18 22:44:18
【问题描述】:

每当有新广告出现时,我都会在 ADMOB 中使用 Swift 语言,我的记忆力正在增加。我认为有泄漏。没有 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)
}

【问题讨论】:

  • 我的应用也有同样的问题。刚启动应用程序,如果横幅加载新广告,内存就会填满。如果我加载新的插页式广告,也会出现同样的问题。似乎 GADBannerView 和 GADInterstitalView 从未被 ARC 清理过。如果我 popToViewController,它甚至会保留在同一个内存中。有人有小技巧吗?
  • 使用检漏仪配置应用程序。找出正在泄漏的对象并报告。
  • 克里姆,你找到解决办法了吗?
  • @Minetroni-Soup ,我没有找到它,但我认为最好的方法是通过更改源代码来编写你的实现。他们的代码在 2 年前就有问题了。
  • 2017 年依然存在泄漏

标签: ios xcode memory-leaks swift admob


【解决方案1】:

您需要致电destroy() 以避免横幅广告和插页式广告出现内存泄漏。插页式广告是一次性使用的对象,因此您必须销毁它们。横幅广告可以重复使用,但一旦使用完毕,请致电destroy()

See this for reference.

【讨论】:

  • 这个方法已经不存在了
【解决方案2】:

我遇到了同样的问题,但使用的是 GADInterstitial AdMob 广告。内存泄漏导致巨大的 CPU 流失。问题是您必须转到实际的根视图控制器。我在 Objective C 中,但基本上,如果你在 UITabBarController 视图层次结构中,那么试试这个:

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

一件事解决了我所有的问题。希望它有效!

【讨论】:

  • 当你想销毁banner时,你也可以这样做banner.rootViewController = nil :)
【解决方案3】:

我认为您需要通过将委托设置为零来释放横幅。 来自 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 调用。

我希望这会有所帮助。

【讨论】:

  • 这可能会有所帮助,但我实际上从未释放视图,这是主视图,并且广告只是占用了所有内存,因此由于内存问题,应用程序在 10 分钟内崩溃。如果禁用广告, - 没有泄漏。所以我知道这是广告。
【解决方案4】:

我发现最好的做法是只分配一次 GADBannerView,否则它会堆积在你的内存中。

我的解决方案是将我的 GADBannerView 存储在一个单例类中,并在应用程序的 rootViewController 加载 (didLoad) 时分配它。然后您可以在任何地方使用它而无需再次请求。

【讨论】:

  • 我也是这样,每次加载新横幅时我都会失去记忆
猜你喜欢
  • 2016-10-16
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 2014-08-19
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多