AVAudioRecorder deleteRecording でクラッシュ
AVAudioRecorder
を生成後、録音を開始しないまま deleteRecording
メソッドを呼ぶとクラッシュしたりエラーが出たりする。
以下のコードで試せる。
iOS 8.2, iOS 8.3 ではクラッシュ
iOS 9.0 β ではコンソールに以下のエラーが出たがクラッシュはしなかった。
objc[1009]: NSError object 0x127d2c8c0 overreleased while already deallocating; break on objc_overrelease_during_dealloc_error to debug
という事で AVAudioRecorder
自体やこれを使ったクラスの後始末の処理の際には注意が必要。
例えば
recording
プロパティが YES であればdeleteRecording
を呼ぶようにする。- 録音開始時に
AVAudioRecorder
を生成するようにして、録音待機状態ではインスタンスを保持しないようにする。(結果、後処理時にインスタンスに対してdeleteRecording
を呼ばないようにする) - 後処理には
stop
メソッドのみを使用しdeleteRecording
メソッドは使用しない。 deleteRecording
を用いて同一のAVAudioRecorder
のインスタンスで再録音を行わずに、録音時には常に新しいAVAudioRecorder
のインスタンスを使用するようにする。(deleteRecording
メソッド自体を一切呼ばないようにする)
このように実装の仕方によって問題を回避できると思う。
追記
OS X 10.10 でも同じコードを試したところクラッシュした。