当设备倾斜到横向时,iOS应用程序崩溃

时间:2015-02-08 07:13:21

标签: ios swift iphone ios8

使用Swift处理iOS 8应用。它只能在纵向模式下支持。

如果应用程序以纵向模式启动并且不会倾斜,以使设备处于横向模式,则该应用程序可以正常运行。如果设备处于横向模式并且处于此模式或倾斜至纵向模式,它也可以毫无问题地运行。

当手机从纵向移动到横向模式时,应用程序每次都会崩溃。错误类型为EXC_BAD_ACCESS并给出一个地址。 UI突出显示AppDelegate类的第一行。

info.plist已更改为表示仅支持纵向模式的事实。另外,我尝试覆盖根视图控制器中的方法shouldAutorotate()。但是,我认为这是一个记忆问题。

我需要哪些信息才能找到解决此问题的方法?任何人都可以指出我在iOS 8中处理内存问题的资源吗?

2 个答案:

答案 0 :(得分:1)

iOS 8中的内存与其他任何操作系统相比都没什么特别之处。 Xcode还附带了大量有用的工具来帮助您。我建议你使用Instruments中的分配工具,使用僵尸,使用guardmalloc,用lldb附加到进程,触发崩溃。

查看分配以查看分配位置并跟踪其生命周期。

使用lldb计算出值并检查调用堆栈。

答案 1 :(得分:0)

这种情况对我们来说会发生,苹果的旋转动画开始出现,然后滞后,然后整个手机重新启动。似乎苹果在方向改变时内置的旋转动画存在内存管理问题。您可以通过在主ViewController中放置以下方法来禁用其旋转动画,从而为我们解决此问题

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {//disables Apple's spinning animation when orientation changes which was causing app crashes due to memory issues

    [UIView setAnimationsEnabled:NO];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)((0.01f) * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{//failsafe
        [UIView setAnimationsEnabled:YES];
    });

    [coordinator notifyWhenInteractionChangesUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) {
        [UIView setAnimationsEnabled:YES];
    }];

    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

}