Spritekit iOS app主线程冻结没有明显错误或死锁

时间:2014-05-31 14:34:11

标签: multithreading ios7 sprite-kit freeze

我有一个法国问题,所以我希望我的英语不会太糟糕。

这是我对社区的第一个问题,首先,我要感谢大家所有有用的提示和答案,我已经在这里阅读了几个月,并为我的第一个iOS帮了我很多忙应用

我对iOS开发世界很新,所以我希望我的问题不会太基础。

来了:

我有一个Spitskit游戏运行“相当”很好,目前没有确定的问题,除了在一些非常罕见的情况下应用程序冻结,永远不会“恢复”。这是一种突破性的游戏,所以我有球和砖,我使用Apple物理世界和Spritekit的物理体。假设每500个主线程冻结一次。起初我调查了死锁,因为我使用了一些多线程(GCD)。但这方面似乎没有任何错误。为了简化对社区的调查,我做了以下更改:在我的代码中根本没有GCD。场景的更新方法中没有任何内容。现在一切都在主场景中运行。我很乐意发布一些代码但不确定什么是相关的,因为我没有GCD和更新代码了。

只有主线程看起来很好。

以下是主线程的btrace,希望它可以提供帮助。每次冻结时,迹线总是相同的。

    * thread #1: tid = 0x519fe, 0x00000001941224d0 libsystem_m.dylib`__sincosf_stret, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
  * frame #0: 0x00000001941224d0 libsystem_m.dylib`__sincosf_stret
    frame #1: 0x000000018f2b864c PhysicsKit`b2SeparationFunction::Evaluate(int, int, float) const + 112
    frame #2: 0x000000018f2b79d0 PhysicsKit`b2TimeOfImpact(b2TOIOutput*, b2TOIInput const*) + 928
    frame #3: 0x000000018f2bfac0 PhysicsKit`b2World::SolveTOI(b2TimeStep const&) + 1144
    frame #4: 0x000000018f2c0318 PhysicsKit`b2World::Step(float, int, int) + 280
    frame #5: 0x000000018f2af248 PhysicsKit`-[PKPhysicsWorld stepWithTime:velocityIterations:positionIterations:] + 260
    frame #6: 0x000000018a38ce08 SpriteKit`-[SKScene _update:] + 616
    frame #7: 0x000000018a39ffc8 SpriteKit`-[SKView(Private) _update:] + 260
    frame #8: 0x000000018a39dab0 SpriteKit`-[SKView renderCallback:] + 876
    frame #9: 0x000000018a39b794 SpriteKit`__29-[SKView setUpRenderCallback]_block_invoke + 76
    frame #10: 0x000000018a3baa90 SpriteKit`-[SKDisplayLink _callbackForNextFrame:] + 288
    frame #11: 0x00000001002ffc80 libglInterpose.dylib`-[DYDisplayLinkInterposer forwardDisplayLinkCallback:] + 172
    frame #12: 0x000000018a114cbc QuartzCore`CA::Display::DisplayLinkItem::dispatch() + 36
    frame #13: 0x000000018a114ac8 QuartzCore`CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 300
    frame #14: 0x000000018840fe74 IOKit`IODispatchCalloutFromCFMessage + 364
    frame #15: 0x00000001874c08e0 CoreFoundation`__CFMachPortPerform + 192
    frame #16: 0x00000001874cee90 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56
    frame #17: 0x00000001874cedf0 CoreFoundation`__CFRunLoopDoSource1 + 444
    frame #18: 0x00000001874cd014 CoreFoundation`__CFRunLoopRun + 1620
    frame #19: 0x000000018740dc20 CoreFoundation`CFRunLoopRunSpecific + 452
    frame #20: 0x000000018d0f5c0c GraphicsServices`GSEventRunModal + 168
    frame #21: 0x000000018a53efdc UIKit`UIApplicationMain + 1156
    frame #22: 0x0000000100117308 MyGameName`main(argc=1, argv=0x000000016fd37bf0) + 116 at main.m:16
    frame #23: 0x000000019400baa0 libdyld.dylib`start + 4

非常感谢您的时间,如果您需要更多信息或代码示例,请随时向我询问。

周末愉快,

格拉德隆

0 个答案:

没有答案