我有一个小型应用程序与iAds,并允许人们付费升级。
iAd在应用程序的NIB中设置。我在主UIViewController的viewDidLoad
方法中检查购买状态,并在ADBannerView
出口成员上调用以下方法:
[adBanner removeFromSuperview];
adBanner = nil;
不幸的是,如果我观看设备的数据使用情况,仍会为广告下载一些数据。
有没有办法正确杀死iAd所以它不会加载任何数据?
我知道我可以以编程方式创建iAd视图,然后只有在用户没有购买产品时才添加它,但我的产品在NIB中运行良好,我不想因为这个原因而改变它。
更新:
在我的.h档案中,我有:
IBOutlet ADBannerView* adBanner;
在- (void)viewDidLoad
方法的.m文件中,我有:
if (purchased) {
[adBanner removeFromSuperview];
adBanner.delegate = nil;
adBanner = nil;
}
我希望在它有机会下载任何数据之前,这足以删除iAd。
唉,这还不足以阻止视图下载数据。我怀疑它在那时完全被解除了延迟 - 但我不知道如何做到这一点,而不是调用dealloc
本身。
有没有人知道一种更好/更正的方法来彻底销毁通过XIB加载并分配给IBOutlet
的对象?
答案 0 :(得分:4)
我怀疑你没有完全发布广告横幅。
创建它时,您是否自动发布了adBanner
?如果没有,您在此处显示的代码无法正确释放横幅。
最有可能的是,你没有自动释放它并保留了它。你需要做的是:
[adBanner release];
而不是
adBanner = nil;
这是无用的,因为它只将指针adBanner
设置为nil
,但根本不释放对象。
答案 1 :(得分:1)
我认为你必须使用第二个笔尖,没有iAd横幅。在将控制权传递回对象之前,nib加载过程将实例化nib的所有元素。这就是为什么你无法阻止iAd尝试加载广告的原因。
首先,复制当前的笔尖,然后删除iAd标题视图。然后覆盖视图控制器的initWithNibName:bundle:
方法以检查付费状态。如果付费,请将笔尖名称更改为非iAd笔尖,并使用其他笔尖调用超类的方法。
答案 2 :(得分:0)
您也可以设置adBanner.delegate = nil
,以阻止adBanner与其代理进行通信。
答案 3 :(得分:0)
@ mr-berna是正确的,您需要有条件地加载iAd视图。您可以按照他的建议进行操作并使用第二个笔尖或以编程方式创建iAd视图。