同时向NSMutableArray写入和读取数据

时间:2015-05-18 19:22:47

标签: ios objective-c audio nsmutablearray streaming

我正在努力制作一个渐进式下载音频播放器,它可以在播放音频时存储音频。

音频格式是流优化m4a

对于这个问题,我认为将带有流光的音频数据包放入内存中,不要将其保存到任何文件中以保持更快。

根据m4a文件的性质,我无法在磁盘上同时写入和读取文件...

所以我从远程源传输并解析音频包,然后将它们放入Singleton NSMutableArray ......

当流媒体下载音像包时,播放器同时从NSMutableArray读取和播放音频数据包......

平均文件大约有11000个音频包,因此数组的计数达到11000.

    NSMutableDictionary * myDict = [[NSMutableDictionary alloc] init];
    NSData *inputData = [NSData dataWithBytes:inInputData length:inPacketDescriptions[i].mDataByteSize];
    [myDict setObject:inputData forKey:@"inInputData"];


    NSNumber *numberBytes = [NSNumber numberWithInt:inNumberBytes];
    [myDict setObject:numberBytes forKey:@"inNumberBytes"];

    NSNumber *numberPackets = [NSNumber numberWithInt:inNumberPackets];
    [myDict setObject:numberPackets  forKey:@"inNumberPackets"];


    NSNumber *mStartOffset = [NSNumber numberWithInt:inPacketDescriptions[i].mStartOffset];
    NSNumber *mDataByteSize = [NSNumber numberWithInt:inPacketDescriptions[i].mDataByteSize];
    NSNumber *mVariableFramesInPacket = [NSNumber numberWithInt:inPacketDescriptions[i].mVariableFramesInPacket];

    [myDict setObject:mStartOffset forKey:@"mStartOffset"];
    [myDict setObject:mDataByteSize forKey:@"mDataByteSize"];
    [myDict setObject:mVariableFramesInPacket forKey:@"mVariableFramesInPacket"];

    [sharedCache.baseAudioCache addObject:myDict];

我的问题是,在某些时候我会遇到死锁吗? 这是音频流的好习惯吗?

1 个答案:

答案 0 :(得分:0)

我建议您在构建NSMutableArray之后使用NSArrays。

您也可以同步锁定NSMutableArray。

@synchronized(yourMutableArray) {
   [yourMutableArray stuffMethod];
}