2012年11月12日月曜日

iOS6非互換:NSTimerの挙動!?

うーん、納得出来ない事象に見舞われています。(-_-;)

iOS5までは問題無く動作していたソースをXcode4.5.2でiOS6SDKでビルドすると上手く動作してくれない。

いろいろ調べたところ、どうも「NSTimer」でスケジュールした定期タスク(無限実行)が起動しておらず、これが原因で不具合が起きておりました。

って事でNSTimer部分を見てもおかしいところがない(そもそもiOS5シミュレータでは正常に動作する)がタイマー処理が起動していない。

<タイマー処理が起動されないソース>
    mTimerTask = [NSTimer scheduledTimerWithTimeInterval:0.5f
                                                  target:self
                                                selector:@selector(_performTimer:)
                                                userInfo:nil
                                                 repeats:YES];


<タイマー処理が起動するソース>
    [NSTimer scheduledTimerWithTimeInterval:0.5f
                                     target:self
                                   selector:@selector(_performTimer:)
                                   userInfo:nil
                                    repeats:YES];

見ての通り、NSTimer部分は全く同じでメンバー変数に代入しているかしていないかの違いのみにも関わらず前者は起動せず、後者は正常にタイマー処理が起動します。

ちなみに代入先の「mTimerTask」変数はプロパティ定義ではなく単純なNSTimer*の変数定義です。
  (変数定義) NSTimer  *mTimerTask;

代入部分の違いだけでタイマー処理が起動しなくなるって「どういうこと?」って感じで納得出来ない状況なので、もしかしたらXcodeコンパイラかiOS6に問題があるんじゃないかと思いたくなるような状況ですね。

0 件のコメント:

コメントを投稿