Pra*_*wal 7 iphone memory-management objective-c ios
我有一个大约2GB的视频文件.此视频文件的标头已加密(大约528字节加密).为了解密这个视频文件,我正在将文件中的所有字节读入NSData对象.一旦我将这个文件写入NSData对象,我的应用程序崩溃了(可能是b'coz max-256MB RAM for iPad).
那么我如何暂时将这个NSData对象存储到iPad/iPhone的虚拟内存中呢?
通过哪种方式我可以达到同样的目的?
Sam*_*Sam 11
使用a NSInputStream逐个读入文件,这样你就不会一次性将它全部加载到内存中.具体来说,你会想要使用hasBytesAvailable和 read:maxLength:.
就像是:
NSInputStream *myStream = [NSInputStream inputStreamWithFilAtPath:pathToAbsurdlyLargeFile];
[myStream open];
Byte buffer[BUFFER_SIZE];
while ([myStream hasBytesAvailable])
{
int bytesRead = [myStream read:buffer maxLength:BUFFER_SIZE];
NSData *myData = [NSData dataWithBytes:buffer length:bytesRead];
// do other stuff...
}
[myStream close];
Run Code Online (Sandbox Code Playgroud)
请注意,您可能不需要创建NSData对象.你刚才提到你正在使用它,所以我把它扔进去了.
| 归档时间: |
|
| 查看次数: |
2256 次 |
| 最近记录: |