首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我在尝试显示GKPeerPickerController时崩溃并说EXC-BAD_ACCESS (ARC打开)

为什么我在尝试显示GKPeerPickerController时崩溃并说EXC-BAD_ACCESS (ARC打开)
EN

Stack Overflow用户
提问于 2012-08-29 12:53:43
回答 1查看 176关注 0票数 1

最近,我在一个正在开发的应用程序中遇到了一个问题。这个应用程序在使用EXC_BAD_ACCESS时崩溃了。这没有意义,因为自动引用计数是打开的。

在应用程序中,我有一个链接到显示GKPeerPickerController的IBAction的按钮。

代码语言:javascript
复制
-(IBAction)showPicker:(id)sender
{
picker = [[GKPeerPickerController alloc ] init];
picker.delegate = self;
picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;

[picker show];
}

这是没有意义的,因为如果我试图使用诸如release之类的调用来管理内存,它会给我一个错误,说明ARC禁用了该调用。据我所知,我对此无能为力。当它崩溃时,EXC_BAD_ACCESS在分配和初始化GKPeerPickerController的行上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-29 13:25:47

这是否仅在您第二次尝试启动GKPeerPicker时发生?

当你的应用程序试图访问它不“拥有”的内存位置时,就会抛出EXC_BAD_ACCESS。这可以通过许多不同的方式发生,即使使用ARC,这使得它很难诊断崩溃。

看看这个问题,比如EXC_BAD_ACCESS (SIGSEGV) crash --使用NSZombies可能是一种跟踪正在发生的事情的方法。

然而,更多地了解正在发生的事情可能会帮助您理解这个崩溃并修复它。

第一个问题是-当我们只是分配一个新分配的对象时,如何获得EXC_BAD_ACCESS呢?嗯-‘魔术的弧线’来这里发挥作用…这个简单的赋值语句将一个新对象赋值给一个实例变量。编译器会看到这一点并说--啊...ivar可能已经分配了一个对象,在这种情况下,我最好释放它……因此,在赋值新值之前,它将为您添加一些代码来检查nil并释放ivar。

所以-我发现不太可能是alloc/init导致了你的问题,而更有可能的是它是当前存储在你的picker中的东西……如果您将picker设置为局部变量而不是ivar,会发生什么?

代码语言:javascript
复制
-(IBAction)showPicker:(id)sender
{
     GKPeerPickerController *localPicker = [[GKPeerPickerController alloc ] init];
     localPicker.delegate = self;
     localPicker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;

     [localPicker show];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12171108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档