NSMutableDataのインスタンスがiPad(iOS7.0.4)でのみリークする
AudioUnit を使って音声の録音、再生を行なうプログラムを作成しているのですが、以下のようなバグに遭遇しました。色々手を尽くしては見たものの一向に改善しなかったため、質問させていただきます。
録音側のAURenderCallbackStructに設定したコールバック関数 AURenderCallback
内中段の NSMutableData *data
でメモリリークを起こしているようです。(Instruments
のAllocations
はずっと右肩上がりになっています:2.5KB/秒)
色々調査した結果分かった事↓です。
- (中略) 部分を削除しても現象に変化はありません
AudioProcessor *rec
、OSStatus status
の行を削除しても現象に変化はありませんNSMutableData *data
を削除するとAllocations
はすぐに一定になりますNSMutableData *data
をint
やNSData
,NSArray
に変更するとAllocation
はすぐに一定になります。NSMutableDataやNSMutableArray
,NSObject
ではAllocation
は一定にならず上昇をし続けたままになります- この現象はiPad mini (iOS 7.0.4) でのみ確認できていて、iPhone 4s (iOS7.1.1) では発生しませんでした。
OSStatus AURenderCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
AudioProcessor *rec = (__bridge AudioProcessor *) inRefCon;
OSStatus status = AudioUnitRender([rec audioUnit], ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, &testbufferList);
NSMutableData *data = [[NSMutableData alloc] init];
/*
~(中略)~
*/
return noErr;
}
以上、ご教示ください。