Ios AdMod所有ViewController中的单个实例
我想在我的应用程序中使用AdMob,我有4个ViewController(在4个选项卡项中),我想让它可见。按照示例显示的方式,每个ViewController都需要创建其实例并添加为子视图 我仍然在想,是否有办法只使用一个实例,可以在所有应用程序中使用。我该怎么做Ios AdMod所有ViewController中的单个实例,ios,objective-c,iphone,admob,Ios,Objective C,Iphone,Admob,我想在我的应用程序中使用AdMob,我有4个ViewController(在4个选项卡项中),我想让它可见。按照示例显示的方式,每个ViewController都需要创建其实例并添加为子视图 我仍然在想,是否有办法只使用一个实例,可以在所有应用程序中使用。我该怎么做 如果我在AppDelegate中创建一个实例作为自动释放,并在每个viewController中保留,然后在viewDidUnload上释放它,然后在下一个选项卡项(viewController)中释放它我再次保留它等等……这是一种
如果我在AppDelegate中创建一个实例作为自动释放,并在每个viewController中保留,然后在viewDidUnload上释放它,然后在下一个选项卡项(viewController)中释放它我再次保留它等等……这是一种好方法吗?AppDelegate aproach是一种很好的方法,但您不应该在每个viewcontroller中保留admob的实例,并在
viewDidUnload
方法中释放相同的实例。不要这样做,只需将admob的视图作为子视图添加到每个viewcontroller的viewdiload
方法中即可。以这种方式,AppDelegate中只有一个Admob视图实例
希望这对您有所帮助。您可以在appDelegate中声明admob视图,并将其作为子视图添加到窗口中。从VC通过appDelegate参考admob视图当然可以,但唯一的问题是,当您更新ad的代理时,除非您明确提出新的ad请求,否则它实际上不会拾取ad的新代理,因此,您的旧视图将收到来自广告的任何通知。我建议您采用制作adMob singleton的方法,然后将任何代理通知转发到正确的视图 因此,创建一个名为
GADMasterViewController
的类(确保它也遵循GadBanerViewDelegate
协议)或具有静态初始值设定项的类:
+(GADMasterViewController *)singleton {
static dispatch_once_t pred;
static GADMasterViewController *shared = nil;
dispatch_once(&pred, ^{
shared = [[GADMasterViewController alloc] init];
});
return shared;
}
然后,在初始值设定项中,可以将单个GadBanerView初始化为此单例的属性:
-(id)init
{
if (self = [super init])
{
self.adBanner = [[GADBannerView alloc]
initWithFrame:CGRectMake(0.0,
0.0,
GAD_SIZE_320x50.width,
GAD_SIZE_320x50.height)];
// Has an ad request already been made
self.isLoaded = NO;
}
return self;
}
然后,您可以使用一种方法将新adView设置为currentDelegate,如下所示:
-(void)resetAdView:(UIViewController<GADBannerViewDelegate> *)rootViewController {
if (self.isLoaded) {
currentDelegate_ = rootViewController;
[rootViewController.view addSubview:self.adBanner];
}
else {
// The delegate to forward any notifications too
currentDelegate_ = rootViewController;
self.adBanner.delegate = self;
self.adBanner.rootViewController = rootViewController;
self.adBanner.adUnitID = kSampleAdUnitID;
GADRequest *request = [GADRequest request];
[self.adBanner loadRequest:request];
[rootViewController.view addSubview:self.adBanner];
self.isLoaded = YES;
}
}
在ViewControllerX
(4个ViewControllerX之一)中,您可以使用以下方法将其添加到视图层次结构中:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
shared = [GADMasterViewController singleton];
[shared resetAdView:self];
}
您不能将一个视图作为子视图添加到多个视图中。谢谢您,Raj,这是一个很好的答案。对于每一个读到这篇文章的人,你也可以阅读
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
shared = [GADMasterViewController singleton];
[shared resetAdView:self];
}