Ios SpriteKit场景未发布

Ios SpriteKit场景未发布,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我有一个主菜单,它通过模式序列启动带有SKView/SKScene的视图控制器。然后我调用dismissViewControllerAnimated,它会将应用程序返回主菜单,但我仍然可以听到场景中的声音效果。当我多次重新启动SKScene时,应用程序最终崩溃 我已经尝试过学习heapshot分析教程(),但似乎没有取得任何进展。我已确保取消分配所有strong@properties 有没有关于是什么导致了这个问题的想法?是否有代码/屏幕截图有用,或者我可以提供任何信息来帮助缩小问题范围 您可以

我有一个主菜单,它通过模式序列启动带有SKView/SKScene的视图控制器。然后我调用dismissViewControllerAnimated,它会将应用程序返回主菜单,但我仍然可以听到场景中的声音效果。当我多次重新启动SKScene时,应用程序最终崩溃

我已经尝试过学习heapshot分析教程(),但似乎没有取得任何进展。我已确保取消分配所有strong@properties

有没有关于是什么导致了这个问题的想法?是否有代码/屏幕截图有用,或者我可以提供任何信息来帮助缩小问题范围


您可以通过以下方式实现dismissViewControllerAnimated方法调用

[self dismissViewControllerAnimated:NO completion:^{
    // release the SKScene here....
}];

从所提供的信息很难知道。我可以告诉你,我有一个类似的问题,结果与SKAction对象有关。我将动作缓存为场景的属性,然后让子节点运行这些动作。我发现确保称为removeAllActions的子节点消除了这个问题。大致如下:

-(void) willMoveFromView:(SKView *)view
{
   [self.children enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        SKNode* child = obj;
        [child removeAllActions];
    }];

    [self removeAllChildren];
}

不确定这是否是您面临的问题,但可能需要注意。

是否启用了ARC?检查所有强实例,是否将其中任何实例存储在skview/skscene或sk view控制器实例之外?另一个常见的错误是图形结构中常见的保留循环,例如,当一个节点保留对其父节点或同级节点之一的强引用时(使其变弱)。是的,使用ARC。重新。第二个问题是,任何具有强实例的类在viewDidUnload或dealloc中将它们设置为nil,这还不够吗?我将深入研究代码以调查您的最后一点。不幸的是,修复我能找到的所有保留周期似乎没有帮助…您是否尝试过以另一种方式拒绝VC-就像一个放松的segue?结果证明这是因为:-@learnocos2d请随意将参考周期作为答案我没有使用导航控制器,只需模态segues和UIViewControllersOk在这种情况下,您仍然可以实现dismissViewControllerAnimate:completion块方法并释放块中的对象。为什么在释放代码位于ViewDiUnload中时需要执行此操作?ViewDiUnload将无法从iOS 6中工作,因为它已被弃用。请参阅