我在两个屏幕的viewdidLoad上有一个带有admob的iphone应用程序
我的代码是:
AbMob =[[GADBannerView alloc]initWithFrame:CGRectMake(0.0,self.view.frame.size.height-195, 320, 50)];
AbMob.adUnitID = AdMob_ID;
AbMob.rootViewController = self;
[self.view addSubview:AbMob];
GADRequest *r = [[GADRequest alloc] init];
r.testing = NO;
[AbMob loadRequest:r];
问题是此代码在一个屏幕上正常工作,但在其他屏幕上崩溃并出现错误
* - [GADOpener didOpen]:发送到解除分配实例的消息 0x6074750
有谁可以告诉我可能是什么问题
答案 0 :(得分:2)
您的代码中某处存在保留/释放问题。你说它在一个视图中工作,但不能在另一个视图中工作 - 这使我相信你将这个实例存储在视图控制器之外。 message sent to deallocated instance
问题是由于您尝试使用在此错误弹出之前已从代码中的某个位置删除的变量。您需要确保正在创建此对象的视图控制器正确retain
,以便在您需要再次使用它之前不会取消分配它:
GADBannerView *_adMobBannerView;
@property(nonatomic,retain) GADBannerView *adMobBannerView; //view controller retains object when using self.adMobBannerView = bla
听起来你可能需要了解memory management documentation,但其中的要点就是你在调用alloc
的任何地方,你正在管理那段记忆,需要打电话给release
当你完成它。如果你需要一个变量来保持比autorelease
d对象更长的时间,那么你需要使用ivar属性retain
自己创建一个实例变量和@property (nonatomic, retain)
。< / p>