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 でも同じコードを試したところクラッシュした。