• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - iPhone Motion - EXC 错误访问

[复制链接]
菜鸟教程小白 发表于 2022-12-13 06:07:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我开始使用 DeviceMotion 类进行编码。遵循Apple的文档后,我有以下内容:

- (void)viewDidLoad {
    [super viewDidLoad];
    myMM = [[CMMotionManager alloc] init];
    myMM.deviceMotionUpdateInterval = 1.0/30.0;
    theQ = [[NSOperationQueue currentQueue] retain];


    motionHandler = ^ (CMDeviceMotion *motionData, NSError *error) {
        if (motionData.rotationRate.z > 5.5 || motionData.rotationRate.z < -5.5) {
            NSLog(@"Rotation of Z.");  // Reference A       
        }
    };

-(IBAction)toggleClick{
    NSLog(@"toggle");

    if(myMM.gyroAvailable){

        if(myMM.deviceMotionActive){
            NSLog(@"Stopping Motion Updates..");
            [myMM stopDeviceMotionUpdates];
        } else {
            NSLog(@"Starting Motion Updates..");
            [myMM startDeviceMotionUpdatesToQueue:theQ withHandler:motionHandler];
        }

    }
    else {
        NSLog(@"No motion available. Quit!");
    }

此代码工作正常,但是当我想要执行 任何 代码,除了 NSLog(甚至像递增整数这样简单的代码)代替“引用 A”时,我得到一个 EXEC Bad在控制台中访问。

我环顾四周,只发现这是某种内存泄漏。有谁知道发生了什么事?如果没有,我该如何弄清楚?我对仪器非常缺乏经验,但如果我指出正确的方向,我将不胜感激。



Best Answer-推荐答案


EXC_BAD_ACCESS 是操作系统级别的异常,这意味着您正在尝试访问不属于您的内存。我认为这与您的 block 在范围内是本地的有关,因此一旦超出范围,它就会被销毁。您需要在堆上创建它的副本。

试试 this answer来自著名的戴夫·德隆。此外,与正常的 Cocoa 内存管理规则一样,如果您制作了副本,请不要忘记 release 它。

例如:

motionHandler = Block_copy(^ (CMDeviceMotion *motionData, NSError *error) {
    if (motionData.rotationRate.z > 5.5 || motionData.rotationRate.z < -5.5) {
        NSLog(@"Rotation of Z.");  // Reference A       
    }
});


// and then later:

- (void) dealloc
{
    [motionHandler release];
    //and all others.
    [super dealloc];
}

关于ios - iPhone Motion - EXC 错误访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4281956/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap