- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在通过 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/
很抱歉新手的问题,但是: 我最近才发现“=”运算符不只是处理对象/等等。值(value),也是引用。这很酷,但我认为这对变量来说是不一样的,它不会在存储整数或 float 的变量之间创建引用。后来我觉
我是一名优秀的程序员,十分优秀!