私のアプリでは、オーディオ処理を行っています。オーディオ バッファの for ループには、NSMutable 配列があります。ループは毎秒膨大な回数呼び出されます (バッファ サイズによって異なります)。例として:
@autoreleasepool
{
for ( int i = 0; i < tempBuffer.mDataByteSize / 2; ++i )
{
if ( samples[i] > trig)
{
[self.k_Array addObject:[NSNumber numberWithInt:k]];
// other stuff
}
}
}
その後、毎秒、他の処理のために関数を呼び出しています。
- (void)realtimeUpdate:(NSTimer*)theTimer
{
// Create a copy of the array
NSMutableArray *k_ArrayCopy = [NSMutableArray arrayWithArray:k_Array]; // CRASH with EXC_BAD_ACCESS code 1 error
//do some stuff with k_ArrayCopy
}
配列のロックの問題が原因で、EXC_BAD_ACCESS エラーが発生することがあります。キュー、ロック、作業コピーなどに関する情報を取得するために多くの時間を費やしました...しかし、この特定のケースについてはわかりません。私の質問:
- にアトミックまたは非アトミックを使用する必要があり
k_array
ますか? dispatch_sync
関数を使用する必要がありますか? もしそうなら、正確にはどこですか?realtimeUpdate
関数をバックグラウンドで呼び出す必要がありますか?
前もって感謝します !