替代已弃用的NSData的dataWithContentsOfMappedFile方法

5

据称自iOS 5.0起,+(id)dataWithContentsOfMappedFile:(NSString *)path已经被弃用。这让我觉得我应该避免使用它,但是我应该使用什么替代品呢?

我使用mmap来创建内存映射文件,在iOS5上工作正常,但在iOS6上有问题,因为一旦我尝试更新或读取缓冲区,就会出现错误。

  int fd = open(path, O_RDWR);
  off_t offset = 0;
  snapshotData = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset);
  close(fd);
1个回答

10

使用+dataWithContentsOfFile:options:error:。 将NSDataReadingMappedIfSafe作为选项传递。 你也可以使用NSDataReadingMappedAlways,但我建议除非真的需要映射,否则使用前者。 如果确实必须映射,则NSDataReadingMappedAlways仍然只是一个提示,所以不能保证一定映射成功。 要获得保证,您需要自己编写代码,如CIMG所讨论的那样。


我会尝试按照CIMG的建议实现。感谢你的指引。 - mprivat
阅读CIMG的评论表明这些选项的命名可能需要更清晰。NSDataReadingMappedIfSafe将执行已弃用API的操作。NSDataReadingMappedAlways将把整个文件读入内存(如果是映射文件,则通常不需要)。 - mm2001

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接