Интеграция IOS и IADOB вызывает утечку памяти? - PullRequest
0 голосов
/ 16 февраля 2012

Я использую этот код, где, если IAD не удается загрузить, он ищет AdMob. Кажется, что все работает нормально, за исключением инструментов, которые я заметил, когда каждый раз вызывается admob. После многократного использования этого инструмента у меня только одна утечка памяти, которая, я уверен, произошла, когда был вызван admob. Я видел, как некоторые люди говорили об утечках памяти с admob, но я не был уверен, было ли это исправлено или нет.

Мой код выглядит хорошо? Если, надеюсь, это поможет кому-то, но я могу в итоге убрать admob из моего приложения, потому что, похоже, через некоторое время программа резко замедлит работу программы. Также я не понял, SDK близко к 8 МБ.

-(void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    if (!self.bannerIsVisible) {
        [bannerView_ removeFromSuperview];
        [UIView beginAnimations:@"animateAdBannerOn" context:NULL];
        banner.frame = CGRectOffset(banner.frame, 0.0, -50.0);
        [UIView commitAnimations];
        self.bannerIsVisible = YES;

    }
}

-(void)callAdMob {
    // Create a view of the standard size at the bottom of the screen.
    bannerView_ = [[GADBannerView alloc]
                   initWithFrame:CGRectMake(0.0,
                                            self.view.frame.size.height -
                                            GAD_SIZE_320x50.height,
                                            GAD_SIZE_320x50.width,
                                            GAD_SIZE_320x50.height)];

    // Specify the ad's "unit identifier." This is your AdMob Publisher ID.
    bannerView_.adUnitID = @"";

    // Let the runtime know which UIViewController to restore after taking
    // the user wherever the ad goes and add it to the view hierarchy.
    bannerView_.rootViewController = self;
    [self.view addSubview:bannerView_];

    // Initiate a generic request to load it with an ad.
    [bannerView_ loadRequest:[GADRequest request]];


}

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
    if (self.bannerIsVisible) {
        [UIView beginAnimations:@"animateAdBannerOff" context:NULL];
        banner.frame = CGRectOffset(banner.frame, 0.0, 50.0);
        [UIView commitAnimations];
        self.bannerIsVisible = NO;
        NSLog(@"bannerview did not receive any banner due to %@", error);
        [self callAdMob];

    }
}
- (void)viewDidLoad
{

        [super viewDidLoad];
    adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
    adView.frame = CGRectOffset(adView.frame, 0.0, 367.0);
    adView.requiredContentSizeIdentifiers = [NSSet setWithObject:ADBannerContentSizeIdentifierPortrait];
    adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
    [self.view addSubview:adView];
    adView.delegate = self;
    self.bannerIsVisible = NO;
}

1 Ответ

0 голосов
/ 17 февраля 2012

Когда вы запускаете его в профилировщике, указывается ли утечка как GeneralBlock-1024 и GeneralBlock-56?Если это так, звучит как утечка UIWebView, которая была в iOS некоторое время.Кажется, он связан с выполнением HTTP-запросов или XML-запросов по HTTP.

Apple должна была исправить это в iOS 5, но она все еще существует в предыдущих версиях iOS.

...