我有一个操作音频文件的代码,首先把所有的音频文件数据放在NSData变量中。但它有时会崩溃,因为它使用了大量的RAM
NSData *data1 = [NSData dataWithContentsOfFile: someFile];我已经使用Instruments检查了所有内容都被释放了,以及RAM是如何使用的,我发现当音频文件太大时,它有时会崩溃。有没有一种方法可以将数据存储在较小的位中,或者存储在闪存中,或者其他任何方式,这样我就可以在不超过iPhone上最大内存的情况下处理大文件。
例如,我正在使用NSData连接两个文件,如下所示:
[data1 appendData: data2];谢谢
发布于 2011-09-25 13:32:47
有一种方法可以将数据存储在较小的位中,或者存储在闪存中,或者以任何其他方式存储,这样我就可以在不超过iPhone上最大内存的情况下处理大文件。
当然了。这个问题比NSData更根本--你通常不会将一组音频文件(全部)加载到内存中,特别是当设备内存非常小时。即使在osx上加载整个文件也是不典型的,在osx上,您可以有足够的内存(除非知道文件非常小)。这就是为什么音频文件apis允许以块为单位(参考:ExtAudioFileRead或AudioFileReadPackets)进行读写。
发布于 2011-09-25 13:00:59
试试这个(来自这个SO问题):
NSData* myBlob;
NSUInteger length = [myBlob length];
NSUInteger chunkSize = 100 * 1024;
NSUInteger offset = 0;
do {
NSUInteger thisChunkSize = length - offset > chunkSize ? chunkSize : length - offset;
NSData* chunk = [NSData dataWithBytesNoCopy:(void*)[myBlob bytes] + offset
length:thisChunkSize
freeWhenDone:NO];
offset += thisChunkSize;
// do something with chunk
} while (offset < length);然后,您可以将每个较小的块存储在某个位置,并在连接后对其执行您想要的操作。
在我这方面,这一切都未经测试,但似乎是合理的。
https://stackoverflow.com/questions/7543712
复制相似问题