菜鸟教程小白 发表于 2022-12-12 09:05:26

iphone - UIAnimation 导致 XCode 在一段时间后崩溃


                                            <p><p>我的应用程序在闲置 5-7 分钟后在 XCode 中崩溃。我确定这与用于加载屏幕的动画有关 - 我粘贴了下面的代码。</p>

<p>我尝试启用 Zombie Objects 以查看它是否是对已释放对象的调用,并附上调试窗口崩溃时的屏幕截图。</p>

<p>顺便说一句 - 如果我按“恢复”,应用程序将继续正常运行..</p>

<p>编辑:这是第一次。我设置的全局断点在 <code>[UIView animateWithDuration:0.2...</code> 行停止,这是输出代码(这次硬崩溃了):</p>

<pre><code>XYZ(14098,0xac3eaa28) malloc: *** mmap(size=2097152) failed (error code=12)
*** error: can&#39;t allocate region
*** set a breakpoint in malloc_error_break to debug 2013-02-23 13:19:36.653 XYZ *** Terminating app due to uncaught exception &#39;NSMallocException&#39;, reason: &#39;*** -: attempt to allocate object of class &#39;UIViewAnimationState&#39; failed&#39;
*** First throw call stack: (0x1cf3012 0x17e8e7e 0x1d7e1a4 0x17fca6b 0x17fca55 0x3acceb 0x3baeec 0x3bb1a7 0x37785 0x3badf6 0x3add66 0x3adf04 0x10fc7d8 0x196d014 0x195d7d5 0x1c99af5 0x1c98f44 0x1c98e1b 0x28f17e3 0x28f1668 0x36fffc 0x28fd 0x2825) libc++abi.dylib: terminate called throwing an exception
</code></pre>

<hr/>

<pre><code>- (void)startAnimating
{   
    _isAnimating = YES;
    float rotationAngle = 360.0 / 3;
    [UIView animateWithDuration:0.5
                        delay:0.0
                        options:UIViewAnimationOptionCurveEaseInOut
                     animations:^
    {
      self.marks.transform = CGAffineTransformRotate(self.marks.transform,
                                                       ((rotationAngle + 10) * (M_PI / 180.0)));
//      self.marks.transform = CGAffineTransformMakeRotation((rotationAngle + 10) * (M_PI / 180.0));
    }
                     completion:^(BOOL finished)
    {
      [UIView animateWithDuration:0.2
                              delay:0.0
                            options:UIViewAnimationOptionCurveEaseInOut
                         animations:^
      {
            self.marks.transform = CGAffineTransformRotate(self.marks.transform,
                                                         -10 * (M_PI / 180.0));
//            self.marks.transform = CGAffineTransformMakeRotation(-10 * (M_PI / 180.0));
      }
                         completion:^(BOOL finished)
      {
            self.marks.transform = CGAffineTransformIdentity;
            ;
      }];
    }];
}
</code></pre>

<p><strong>正常崩溃时的截图:</strong></p>

<p> <img src="https://i.imgur.com/eGvxeCW.png" alt="Screenshot with NSZombieObjects disabled"/> </p>

<p><strong>NSZombieObjects 开启时的截图:</strong></p>

<p> <img src="https://i.imgur.com/a0tJvcG.png" alt="Screenshot with NSZombieObjects enabled"/> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>第二个动画的完成 block 递归调用 startAnimating。我认为这是问题的原因。您应该改用循环或创建重复动画。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - UIAnimation 导致 XCode 在一段时间后崩溃,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15036257/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15036257/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - UIAnimation 导致 XCode 在一段时间后崩溃