這是我的問題。 也請不要說我知道AdWhirl,但選擇不使用它,因爲我更喜歡控制我的廣告正在發生的事情。AdMob GADBannerView在不應該發佈和接收廣告請求時
基本上我有iAds和AdMob。我始終開始使用iAds,如果廣告沒有任何顯示,我會初始化AdMob並開始顯示它。然後,當iAds最終顯示某些內容時,我會隱藏Admob廣告並摧毀視圖並再次顯示iAds。
這似乎爲1個迭代意義的工作:
- 初始化網絡成癮
- 成癮者沒有任何內容顯示
- 隱藏的iAds
- 初始化AdMob聯播
- AdMob聯播顯示廣告
- iAds已收到內容,所以我們應該顯示它!
- 隱藏AdMob聯播
- 釋放AdMob中查看的對象
的問題是..隨着時間的推移,如果我離開應用程序運行和iAd的失敗幾次加載廣告(意爲我做切換的一個位,該位導致創建Admob視圖)發佈的Admob視圖對象沒有被釋放,並且不斷收到新的廣告,即使它不應該。
這裏是我跑每當我接收來自網絡成癮者的碼3的代碼(這意味着:該操作不能完成的廣告資源不可用)
-(void) smartInitialize:(UIViewController*) theVC
{
NSLog(@"AMOB :: smartInitialize");
if(!initialized)
{
NSLog(@"AMOB :: PRE initialization");
CGRect appFrame = [UIScreen mainScreen].applicationFrame;
UIView * theView = [[UIView alloc] initWithFrame:appFrame];
theView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
theViewController = theVC;
//[theViewController retain];
self.view = theView;
[theView release];
adMobAd = nil;
adMobAd = [self requestNewAdmobView];
if(adMobAd != nil)
{
NSLog(@"AMOB :: adding ADMOBVIEW TO VIEW CONTROLLER!");
[theVC.view addSubview:adMobAd];
[adMobAd release];
}
initialized = YES;
}
else
{
NSLog(@"AMOB :: POST initialization");
if(adMobAd!=nil)
{
NSLog(@"AMOB :: adMobView is present, doing nothing...");
}
else
{
NSLog(@"AMOB :: reinitializing..");
[self reinitializeAdmob];
}
}
}
這裏是[自requestNewAdmobView]函數:
- (GADBannerView*) requestNewAdmobView
{
NSLog(@"AMOB :: requestNewAdmobView");
CGRect adFrame = CGRectZero;
NSString * appID = nil;
adMobAd = nil;
if(DEVICE_IPAD)
{
adFrame.size = GAD_SIZE_728x90;
appID = @"id1";
}
else
{
adFrame.size = GAD_SIZE_320x50;
appID = @"id2";
}
GADBannerView * tmp = nil;
tmp = [[GADBannerView alloc] initWithFrame:adFrame];
if(tmp != nil)
{
NSLog(@"AMOB :: adMobAD != nil , commencing with other stuff!");
tmp.adUnitID = appID;
tmp.rootViewController = gD.viewController;
tmp.delegate = self;
[tmp loadRequest:[GADRequest request]];
[tmp setHidden:NO];
}
else
{
NSLog(@"AMOB :: adMobAD == nil , THIS IS BAD..");
}
return tmp;
}
這裏是[自reinitializeAdmob]函數:
-(void) reinitializeAdmob
{
NSLog(@"AMOB :: reinitializeAdmob");
if(theViewController != nil)
{
[self shutdownAdmob];
adMobAd = nil;
adMobAd = [self requestNewAdmobView];
if(adMobAd!=nil)
{
[theViewController.view addSubview:adMobAd];
}
}
}
最後的[自shutdownAdmob]
-(void) shutdownAdmob
{
NSLog(@"AMOB :: shutdownAdmob");
if(adMobAd!=nil)
{
NSLog(@"AMOB :: adMobAd != nil, removing from superview and nilling...");
adMobAd.delegate = nil;
[adMobAd removeFromSuperview];
//[adMobAd release];
adMobAd = nil;
}
else
{
NSLog(@"AMOB :: adMobAd == nil");
}
}
從我的理解,我打掃的GADBannerView
既然叫AdMobView正確,因爲:
- 首先是==零
- 然後在[自requestNewAdmobView ]我正在分配一個實例,所以保留計數= 1
- 我回來了,然後將其添加到viewControllers視圖和視圖保留它,使保留計數增加到2
- 我然後發佈adMobView,所以我不再擁有它,並保留下降到1
- 然後,當我想完全擺脫在[self shutdownAdmob]中的對象我使用removeFromSupreview函數釋放視圖從控制器,因此它應該釋放它(我甚至通過繼承GADViewController來進行測試,並在釋放時執行NSLog並確實執行dealloc)。
唷..這是很多文字對不起。所以問題是: 爲什麼admobview第一次正確移除自己,但第二次移除它卻沒有。