0

アプリでアニメーションを設定するために performSelector:withObject:afterDelay を使用しています。アプリはリリースでクラッシュしますが、デバッグではクラッシュしません。クラッシュ ログは次のようになります。

Exception Type:  EXC_CRASH (SIGSEGV)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  1

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   libobjc.A.dylib                 0x35736e3e objc_release + 14
1   stky                            0x0010e096 -[OPLabel executeStrikethroughAnimationWithCompletion:] (OPLabel.m:142)
2   Foundation                      0x37a6992c __NSFireDelayedPerform + 408
3   CoreFoundation                  0x37207a2c __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8
4   CoreFoundation                  0x37207692 __CFRunLoopDoTimer + 358
5   CoreFoundation                  0x37206268 __CFRunLoopRun + 1200
6   CoreFoundation                  0x3718949e CFRunLoopRunSpecific + 294
7   CoreFoundation                  0x37189366 CFRunLoopRunInMode + 98
8   GraphicsServices                0x32096432 GSEventRunModal + 130
9   UIKit                           0x3390de76 UIApplicationMain + 1074
10  stky                            0x000f7224 main (main.m:16)
11  stky                            0x000f71d8 0xf6000 + 4568

私が知る限り、アプリをクラッシュさせているのは遅延メソッドを呼び出そうとする試みです。しかし、それを超えて、問題が何であるかはわかりませんし、デバッグ方法もわかりません(デバッグモードでは発生しないため)。ヘルプ?ありがとう。

4

2 に答える 2

0

パラメータとして performSelector に渡すオブジェクトは、リリース モードでより積極的に解放されます。遅延後もメモリ内にあることを確認するために、それを保持する必要があります (遅延が 0.0 の場合でも!)。

于 2012-09-05T08:39:13.237 に答える
0

オブジェクトの代わりにいくつかのプリミティブ値を参照できると私が推測する唯一のことは、コードを見た後に分析され、プリミティブ値を使用している場合は (id)value を使用して、これが機能するかどうかを試してください

これのもう 1 つの一般的な原因は、既にメモリから解放されているオブジェクトが呼び出されていることです。NSZombieEnabled でこれをトレースしてみてください

于 2012-05-02T19:17:20.110 に答える