2012-02-16 95 views
0

我使用这段代码,如果一个iad加载失败,它会查找admob。一切似乎工作正常,除了在仪器中,我注意到一个admob被称为任何时候大内存秒杀。在多次使用仪器之后,我只能得到一次内存泄漏,当一个admob被调用时,我肯定会发生内存泄漏。我看到一些人用admob谈论内存泄漏,但我不确定这是否是固定的。ios iad和admob集成导致内存泄漏?

我的代码看起来不错吗?如果希望这可以帮助别人,但我最终可能会将admob从我的应用程序中取出,因为它似乎在一段时间后大幅度减慢了程序。我也没有意识到sdk接近8mb。

-(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; 
} 
+0

您使用ARC吗?如果没有,它似乎没有在任何地方释放“bannerView_”或“adView”。 'addSubview'会保留你传递给它的视图,所以你可以在把它交给'addSubview'后自由释放视图。 – 2012-02-16 20:02:43

+0

是的,我正在使用ARC – user1108720 2012-02-16 20:04:16

+0

只是为了更新任何可能使用此代码的人,在运行仪器时我只注意到了这个代码的减速。我没有注意到设备上的任何放缓。 – user1108720 2012-02-16 23:05:25

回答

0

当您在探查器中运行它时,泄漏是否列为GeneralBlock-1024和GeneralBlock-56?如果是这种情况,听起来像是iOS中的UIWebView泄漏。它似乎与通过HTTP进行HTTP请求或XML请求有关。

苹果应该已经在iOS 5中解决了这个问题,但它仍然存在于先前版本的iOS中。

+0

泄漏的对象是Malloc 128字节。负责任的库libdispatch.dylib – user1108720 2012-02-17 01:51:38

+0

正如你已经注意到的那样,这是一个泄漏,只发生在模拟器上,从不在实际的设备上,所以不应该是生产中的问题。 – RajPara 2012-02-17 18:31:33

+0

在我的情况下,它也是在设备...任何想法,为什么在将admob集成到我的ios应用程序! ? – Tornado 2012-02-28 11:55:44