我使用这段代码,如果一个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;
}
您使用ARC吗?如果没有,它似乎没有在任何地方释放“bannerView_”或“adView”。 'addSubview'会保留你传递给它的视图,所以你可以在把它交给'addSubview'后自由释放视图。 – 2012-02-16 20:02:43
是的,我正在使用ARC – user1108720 2012-02-16 20:04:16
只是为了更新任何可能使用此代码的人,在运行仪器时我只注意到了这个代码的减速。我没有注意到设备上的任何放缓。 – user1108720 2012-02-16 23:05:25