如何使用NSFileHandle的readabilityHandler检查文件结尾?

Sve*_*ven 13 macos cocoa objective-c nsfilehandle

我正在使用块从a NSFileHandle(从a NSPipe)读取数据readabilityHandler:

fileHandle.readabilityHandler = ^( NSFileHandle *handle ) {
     [self processData: [handle availableData]];
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,我得到了我期望提供给我的processData方法的所有数据.问题是我需要知道何时读取了最后一块数据.如果它到达文件结尾,availableData则应返回一个空NSData实例,但问题是在EOF上不再调用可达性处理程序.

我找不到任何关于如何在EOF上获得某种通知或回调的信息.那我错过了什么?Apple是否真的在没有EOF回调的情况下提供异步读取API?

顺便说一下,我不能使用基于runloop的readInBackgroundAndNotify方法,因为我没有可用的runloop.如果我无法使用NSFileHandleAPI,我可能会直接使用调度源来执行IO.

Jer*_*ner 0

恐怕NSFileHandle如果您不能使用readInBackgroundAndNotify.

我看到的两个解决方案:

  1. 创建一个 runloop 然后使用readInBackgroundAndNotify.
  2. 使用以下方式滚动您自己的实现dispatch_io_*