在我的应用程序中,我正在做一些音频处理。在音频缓冲区的 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
在后台调用该函数吗?
提前致谢 !