iPhone 变得非常热,应用程序因 Admob 插页式广告而出现延迟和崩溃

Pet*_*ter 5 objective-c admob ios

在实施 Admob 时,我遇到了一些严重的问题。我遵循了官方文档,但玩游戏一段时间后,手机开始变得非常热,过了一会儿,应用程序突然变得非常缓慢和滞后,最终崩溃。

我 100% 确定这是由于显示了大量 Admob 插页式广告所致。因为应用程序在没有它们的情况下也可以完美运行。

我承认,如果你玩了一段时间,就会显示很多广告,但关闭它们不是一个选择,因为它是应用程序的主要收入来源。

这是我用来加载和显示广告的代码:

- (void)loadInterstitial {
    [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-xxx/xxx" request:[GADRequest request] completionHandler:^(GADInterstitialAd *ad, NSError *error) {
        if (error) {
            NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
            return;
        }
        self.interstitial.fullScreenContentDelegate = nil;
        self.interstitial = ad;
        self.interstitial.fullScreenContentDelegate = self;
    }];
}

- (void)displayInterstitial {
    if (self.interstitial) {
        [self.interstitial presentFromRootViewController:self];
        adCount = 0;
        [[NSUserDefaults standardUserDefaults] setInteger:adCount forKey:@"adCount"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    } else {
        NSLog(@"Ad wasn't ready");
    }
}

- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    [self loadInterstitial];
}
Run Code Online (Sandbox Code Playgroud)

没什么特别的。对我来说,显示大量插页式广告后内存似乎会超载,有什么方法可以在显示后处理它们吗?

Cy-*_*4AH 1

您需要interstitial在新请求之前清除旧请求:

- (void)loadInterstitial {
    self.interstitial.fullScreenContentDelegate = nil;
    self.interstitial = nil;
    [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-xxx/xxx" request:[GADRequest request] completionHandler:^(GADInterstitialAd *ad, NSError *error) {
        if (error) {
            NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
            return;
        }
        self.interstitial = ad;
        self.interstitial.fullScreenContentDelegate = self;
    }];
}
Run Code Online (Sandbox Code Playgroud)