2

我正在开发我的 iOS 应用程序,我的目标是一点一点地保存从 Internet 接收的文件。我当前的设置是我有一个NSMutableData对象,并在收到文件时向它添加一些数据。收到最后一个“数据包”后,我将其写入NSData文件并完成该过程。我有点担心这不是理想的方法,因为移动设备中 RAM 的限制,并且接收大文件会有问题。

我的下一个想法是实现一个NSFileHandle,以便当文件到达时,它将被保存到磁盘,而不是虚拟内存。

在速度和效率方面,您认为哪种方法在 iOS 设备上运行得很好。我目前正在使用第一种NSMutableData方法。是否值得更改我的应用程序以使用NSFileHandle?

在此先感谢,古维

4

3 回答 3

1

如果您正在下载的数据是无限的(即没有最大文件大小),那么值得您花一些时间将一些代码放入您的下载和保存方案中以将数据从“ NSMutableData”对象刷新到文件在某个临界点(例如 2K、10K、1Meg 等)。然后当内存中的数据对象再次填满时附加到该文件上。

由于 iDevice 没有物理硬盘驱动器(嗯,我的意思是一个旋转的盘片,并且会消耗额外的能量来启动旋转和读写头),因此仅写入这些字节也可能是值得的直接到文件句柄。我不相信它会在功耗方面花费任何额外费用。更大的功耗是在网络通信中(蜂窝通信是耗电的,WiFi 连接稍微少一点)。

于 2012-06-07T22:40:22.330 回答
0

取决于你下载的文件有多大。如果您要立即使用该文件,那么第一个选项将是最好的,看起来好像它会先保存到 RAM,然后再保存到磁盘,然后再将所有文件加载到 RAM 中。但是,如果它是一个非常大的文件,即使它会被使用以便 iPhone 可以在后台处理它,也可能值得将它保存到磁盘。这主要取决于您,只需运行一些测试,看看使用该应用程序时的感觉。

于 2012-06-07T22:41:16.360 回答
0

您可以尝试使用 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];
于 2012-06-07T23:05:40.427 回答