2012-02-16 33 views
0

私はこのコードを使用します.Iadが読み込みに失敗した場合、それはadmobを探します。アドモブが呼び出されるたびに大きなメモリスパイクに気づいた楽器を除き、すべてが正常に動作するように見えます。これを楽器を複数回通した後は、メモリリークが一度しか発生しませんでした。私はadmobでメモリリークについて話している人もいますが、これが修正されたかどうかはわかりませんでした。iosとadmob intergrationがメモリリークを引き起こしていますか?

私のコードはよく見えますか?だからうまくいけば、これは誰かを助けてくれるが、しばらくするとプログラムが大幅に遅くなってしまうので、私のアプリから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'に渡した後で自由にビューを解放することができます。 –

+0

はい私はARCを使用しています – user1108720

+0

このコードを使用する可能性のある人を更新するだけで、楽器を実行するときにこのコードでの減速に気付きました。私はデバイスの減速に気づいていません。 – user1108720

答えて

0

プロファイラで実行すると、リークはGeneralBlock-1024とGeneralBlock-56として表示されますか?これが当てはまる場合は、iOSにしばらくおいたUIWebViewリークのように聞こえます。それは、HTTPリクエストまたはHTTP経由のXMLリクエストの作成に結びついているようです。

AppleはiOS 5でこれを修正していたはずですが、iOSの以前のバージョンにはまだ存在しています。

+0

リークされたオブジェクトはMalloc 128バイトです。責任があるライブラリlibdispatch.dylib – user1108720

+0

あなたがすでに気付いていたように、これはシミュレータでのみ発生し、実際のデバイスでは起こりませんので、本番環境では問題ではありません。 – RajPara

+0

私の場合、デバイスにも入っています...なぜ私のiosアプリケーションにadmobを統合している間、どんなアイデアが!! ? – Tornado

関連する問題