Friday, September 2, 2011

Watchdog in iOS(0x8badf00d, ate bad food)

iOSのシステムの中にメインスレッドを監視している仕組みがあります。それは「Watchdog」と呼びます。

「Watchdog」の役割としては、メインスレッドが「20秒間」に反応がない場合、そのアプリを強制終了します。特にメインスレッドで同期なネットワーク操作をやる度に、Watchdogに強制終了される可能性が非常に高いです。どうやってそのケースを探知できるのは私が一番知りたいことです。答えはWWDC 2010のSession 208 Network apps for iPhone OS, Part 2にあります。
強制終了された場合、Crash Logが生成されます。Crash Logの「Exception Codes」を検索して、次のようなものがあれば、Watchdogに強制終了されることがわかります。

Exception Type: 00000020
Exception Codes: 0x8badf00d

一番面白いところは0x8badf00dの意味ですよ。これは本当にこのアドレスにエラーが発生したことではなく、単純に「ate bad food」の意味です。

ちなみに、いくつかのタイムアウト範囲があります。次のようにリストします。


  • Watchdog: 20秒
  • DNS: 30秒
  • TCP Connection: 75秒
  • NSURLConnection: 60秒
このような数字は頭の隅においておくと、意外なときに役に立つと思います。



No comments:

Post a Comment