菜鸟教程小白 发表于 2022-12-13 06:07:46

ios - iPhone Motion - EXC 错误访问


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

<pre><code>- (void)viewDidLoad {
    ;
    myMM = [ init];
    myMM.deviceMotionUpdateInterval = 1.0/30.0;
    theQ = [ retain];


    motionHandler = ^ (CMDeviceMotion *motionData, NSError *error) {
      if (motionData.rotationRate.z &gt; 5.5 || motionData.rotationRate.z &lt; -5.5) {
            NSLog(@&#34;Rotation of Z.&#34;);// Reference A      
      }
    };

-(IBAction)toggleClick{
    NSLog(@&#34;toggle&#34;);

    if(myMM.gyroAvailable){

      if(myMM.deviceMotionActive){
            NSLog(@&#34;Stopping Motion Updates..&#34;);
            ;
      } else {
            NSLog(@&#34;Starting Motion Updates..&#34;);
            ;
      }

    }
    else {
      NSLog(@&#34;No motion available. Quit!&#34;);
    }
</code></pre>

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

<p>我环顾四周,只发现这是某种内存泄漏。有谁知道发生了什么事?如果没有,我该如何弄清楚?我对仪器非常缺乏经验,但如果我指出正确的方向,我将不胜感激。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><code>EXC_BAD_ACCESS</code> 是操作系统级别的异常,这意味着您正在尝试访问不属于您的内存。我认为这与您的 block 在范围内是本地的有关,因此一旦超出范围,它就会被销毁。您需要在堆上创建它的副本。</p>

<p>试试 <a href="https://stackoverflow.com/questions/2659072/copying-blocks-ie-copying-them-to-instance-variables-in-objective-c/2659357#2659357" rel="noreferrer noopener nofollow">this answer</a>来自著名的戴夫·德隆。此外,与正常的 Cocoa 内存管理规则一样,如果您制作了副本,请不要忘记 <code>release</code> 它。</p>

<p>例如:</p>

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


// and then later:

- (void) dealloc
{
    ;
    //and all others.
    ;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - iPhone Motion - EXC 错误访问,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/4281956/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/4281956/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - iPhone Motion - EXC 错误访问