• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:iPhone開発について(変数))

iPhone開発でボタンのタップ時間を取得する方法

このQ&Aのポイント
  • iPhone開発でボタンのタップ時間を取得する方法について教えてください。
  • ボタンをアップしたときにEXC_BAD_ACCESSのエラーが発生してしまう問題についても解決方法を教えてください。
  • タップ時間の計測に関するサンプルソースやより効率的な方法があれば共有してください。

質問者が選んだベストアンサー

  • ベストアンサー
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

startTap = [NSDate date]; > startTap = [[NSDate alloc] init]; あるいは [[NSDate date] retain]; いまのままでは、「autorelease」状態にあるので、インスタンスstartTapは、いつ開放されてもおかしくありません。「EXC_BAD_ACCESSのエラー」というのは、開放されたあとで、アクセスしたというエラー。 ここらへんの詳しいことは、お手持ちのiPhoneアプリ開発の解説書で、「Retain Count」を索引で牽いてください。 なお、開放されないように変更すると、ぎゃくにいつまでたっても開放されないので、deallocメソッド内で、releaseを送るのを忘れずに。 - (void)dealloc { [startTap release]; [super dealloc]; } もうひとつの手法としては、NSDateをインスタンス変数にせずに、NSTimeInterval型の実数をインスタンス変数にすること。NSTimeInterval型の実体はdouble型です。なので、インスタンス変数というより、C言語のグローバル変数として扱われるので、スコープ間(この場合、@implementationから@endの間)開放されることはありません。 宣言部: NSTimeInterval tapDate; 実装部: (IBAction)tapBtn_down{ tapDate = [NSDate timeIntervalSinceReferenceDate]; } - (IBAction)tapBtn_up{ NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate]; NSLog(@"%f", now - tapDate); }

RYO-88
質問者

お礼

harawo 様 本当に解りやすい解説ありがとうございました。 autoreleaseは、アップルも推奨していないというところも参考書で把握していたのですが、勉強中なのでと気軽に利用して嵌まっていたということですね。 本当にありがとうございました。

関連するQ&A