【发布时间】:2012-09-26 23:07:53
【问题描述】:
我只能在特定应用中使用 CoreFoundation,并且无权访问 NSData。
我需要使用内存映射访问文件中的数据,因为该文件可能非常大。使用NSData,我可以使用+dataWithContentsOfURL:options:error: 方法实现这一点,传入NSDataReadingMappedAlways 选项。
可以用CFData 做到这一点吗?我能找到的唯一可以直接从文件中创建CFData 对象的函数是CFURLCreateDataAndPropertiesFromResource() 函数,它没有任何设置内存映射标志的选项。
有没有使用内存映射读取从文件中加载CFData 对象的低级方法?我必须下拉到mmap 吗?
【问题讨论】:
-
作为一个快速的旁注:如果你只想避免缓存,你应该使用 NSDataReadingUncached,而不是 NSDataReadingMappedAlways。除非您实际上需要要映射的数据,即使不安全或速度较慢(想想 NFS),为什么要要求它呢?但是,更重要的是,
NSDataReadingMappedAlways只是一个“如果可能,映射文件的提示”——如果它不能被映射,它将被正常读取,并且可能存储在缓存中。 -
有趣,非常感谢您的澄清。
标签: objective-c macos cocoa-touch cocoa core-foundation