我正在开发我的iOS应用程序,我的目标是一点一点地保存我从互联网上收到的文件。我目前的设置是,我有一个NSMutableData对象,并在收到文件时向其中添加一些数据。在收到最后一个“数据包”之后,我将NSData写到一个文件中,这个过程就完成了。我有点担心这不是一种理想的方式,因为移动设备中RAM的限制,而且接收大文件会有问题。
我的下一个想法是实现一个NSFileHandle,这样当文件到达时,它将被保存到磁盘上,而不是虚拟内存中。
就速度和效率而言,您认为哪种方法在iOS设备上可以很好地工作。我目前正在使用第一种方法,即NSMutableData方法。是否值得将我的应用程序更改为使用NSFileHandle
预先谢谢,Guvvy
发布于 2012-06-08 06:40:22
如果您正在下载的数据是无界的(即没有最大文件大小),那么值得在您的下载和保存方案中添加一些代码,以便在某个临界点(例如2K、10K、1兆)将数据从"NSMutableData“对象刷新到文件中。然后当存储器中的数据对象再次填满时附加到该文件上。
由于iDevice没有物理硬盘驱动器(嗯,因为我的意思是一个旋转的盘片,额外的能量被消耗来启动旋转和读写磁头),所以直接将这些字节直接写入文件句柄也是值得的。我不认为它会在电力消耗方面花费任何额外的费用。网络通信的功耗更大(蜂窝通信是耗电最多的,WiFi连接的耗电要少一些)。
发布于 2012-06-08 06:41:16
取决于您正在下载的文件的大小。如果您打算直接使用该文件,那么第一个选项将是最好的,因为它会先保存到RAM,然后再保存到磁盘,然后再加载到RAM中。但是,如果它是一个非常大的文件,那么将它保存到磁盘可能是值得的,即使它将被使用,以便iPhone可以在后台处理它。这主要取决于你,只需运行几个测试,看看使用应用程序时的感觉。
发布于 2012-06-08 07:05:40
您可以尝试使用AFNetworking和它们的Streaming Request
NSURL *url = aUrl;
NSString *path = aPath;
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:YES];
[operation start];https://stackoverflow.com/questions/10940813
复制相似问题