【问题标题】:iOS Efficiency File Saving EfficiencyiOS效率文件保存效率
【发布时间】:2012-06-07 22:36:51
【问题描述】:

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

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

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

提前致谢, 古维

【问题讨论】:

    标签: objective-c ios xcode filehandle


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您可以尝试使用 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];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-07
          • 1970-01-01
          相关资源
          最近更新 更多