gpt4 book ai didi

ios - 在 Swift 中加载插页式广告时出现令人沮丧的内存泄漏

转载 作者:行者123 更新时间:2023-11-29 05:48:47 24 4
gpt4 key购买 nike

我在通过 AdMob 加载插页式广告时遇到了令人恼火的内存泄漏问题。在 Xcode 和 Instruments 中观察内存时,每次访问托管广告的 View Controller 时,内存都会跳跃 10 MB。此外,当关闭我手机上的应用程序并重新打开它时,也会导致内存跳跃 30-40 mb,这太荒谬了。

我尝试在 Instruments 中对此进行分析,分配的内存都是系统库,没有任何内容指出问题所在。我读过其他 Stack Overflow 答案,例如 ADMOB Memory Leaking?但到目前为止没有答案对我有帮助。也许有人可以告诉我我的代码有什么问题?我已遵循 AdMob 提供的确切文档,即 https://developers.google.com/admob/ios/interstitial除了这个疯狂的内存泄漏之外,一切都工作正常。下面是导致泄漏的确切代码。


class ViewController: UIViewController, GADInterstitialDelegate {

var interstitial: GADInterstitial!

override func viewDidLoad() {
interstitial = createAndLoadInterstitial()
interstitial.delegate = self
}

func update() {
if interstitial.isReady {
interstitial.present(fromRootViewController: self)
}
}

func createAndLoadInterstitial() -> GADInterstitial {
let interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
interstitial.delegate = self
let request = GADRequest()
interstitial.load(request)
return interstitial
}

func interstitialDidDismissScreen(_ ad: GADInterstitial) {
interstitial = createAndLoadInterstitial()
}

// I am calling update() inside a button when pressed in this VC.

最佳答案

我只想说这个问题其实已经被我解决了。我按照评论中所述的上述操作之一进行了操作。我获取了托管插页式广告的 View Controller 上的代码,并将其移至应用程序委托(delegate)。然后,只要我的项目中需要它,我就引用插页式广告对象。这使内存恢复到访问托管广告的 Controller 时分配的内存。对于那些想要查看应用程序委托(delegate)中的一个非常简单的示例的人:

import UIKit
import GoogleMobileAds

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, GADInterstitialDelegate {

var myInterstitial: GADInterstitial!

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
GADMobileAds.sharedInstance().start(completionHandler: nil)
myInterstitial = createAndLoadInterstitial()
return true
}

func createAndLoadInterstitial() -> GADInterstitial {
let interstitial = GADInterstitial(adUnitID: "yourAdID")
interstitial.delegate = self
let request = GADRequest()
interstitial.load(request)
return interstitial
}

func interstitialDidDismissScreen(_ ad: GADInterstitial) {
myInterstitial = createAndLoadInterstitial()
}

关于ios - 在 Swift 中加载插页式广告时出现令人沮丧的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55875546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com