为什么iAd在从超级视图中删除后仍然加载数据,这可以停止吗?

时间:2011-05-11 08:01:28

标签: ios iad

我有一个小型应用程序与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的对象?

4 个答案:

答案 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视图。