分配对象时,仅在设备上使用EXC_BAD_ACCESS

时间:2011-11-06 19:48:49

标签: ios

我在行

处收到EXC_BAD_ACCESS错误
GADRequest *request = [[GADRequest alloc] init];

我没有来自Google AdMob SDK的GADRequest源代码。 堆栈跟踪如下。 它仅在设备上发生而不在模拟器上发生。

#0  0x34a80462 in objc_msgSend ()
#1  0x0017d9dc in +[GADRequest alloc] (self=<value temporarily unavailable, due to optimizations>, _cmd=<value temporarily unavailable, due to optimizations>) at /Users/mikeying/work/ios_sdk_git/googlemac/iPhone/GoogleAds/NextGen/Request/GADRequest.m:48
#2  0x0006e728 in -[AdWhirlAdapterGoogleAdMobAds getAd] (self=0x5511c0, _cmd=0x225209) at /Users/xxx/yyy/libs/AdWhirl/adapters/AdWhirlAdapterGoogleAdMobAds.m:68
#3  0x0007b4f6 in -[AdWhirlView makeAdRequest:] (self=0x5538f0, _cmd=0x22691c, isFirstRequest=1 '\001') at /Users/xxx/yyy/libs/AdWhirl/internal/AdWhirlView.m:370
#4  0x0007ac5c in -[AdWhirlView buildPrioritizedAdNetCfgsAndMakeRequest] (self=0x5538f0, _cmd=0x226965) at /Users/xxx/yyy/libs/AdWhirl/internal/AdWhirlView.m:235
#5  0x35818bbe in -[NSObject(NSObject) performSelector:withObject:] ()

1 个答案:

答案 0 :(得分:0)

当消息发送到已解除分配的对象时,程序会收到EXC_BAD_ACCESS信号。将环境变量NSZombieEnabled设置为YES,对象永远不会被释放,而是作为zombie对象保存在内存中。当消息发送到僵尸对象时,执行将停止在通常会导致EXC_BAD_ACCESS信号的行上。

在Xcode 4.2中,您可以通过编辑方案设置环境变量,在左侧面板中选择“Run XYZ.app”阶段,然后选择右侧的“Arguments”选项卡。

完成后禁用NSZombieEnabled非常重要,否则您的应用程序会占用大量内存并最终崩溃。