我正在尝试使用 FSEvents API(OSX 10.9,启用 ARC,沙盒)监视一组路径。以下代码泄漏文件描述符。使用lsof,我得到了很多:
Project 70505 aaa 22u KQUEUE count=0, state=0x1
几个小时后,我达到了最大打开描述符限制,并且 FSEventStreamCreate 开始失败。
知道为什么每次运行它都会泄漏两个文件描述符吗?
FSEventStreamContext callbackInfo;
callbackInfo.version = 0;
callbackInfo.info = NULL;
callbackInfo.retain = NULL;
callbackInfo.release = NULL;
callbackInfo.copyDescription = NULL;
// ===== +2 descriptors ======
FSEventStreamRef ev = FSEventStreamCreate(NULL,
NULL,
&callbackInfo,
((__bridge CFArrayRef)[NSArray arrayWithObject:@"/Users/aaa/Downloads"]),
kFSEventStreamEventIdSinceNow,
0,
kFSEventStreamCreateFlagUseCFTypes | kFSEventStreamCreateFlagWatchRoot);
// ===== +2 descriptors ======
FSEventStreamScheduleWithRunLoop(ev, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
FSEventStreamStart(ev);
FSEventStreamStop(ev);
FSEventStreamUnscheduleFromRunLoop(ev, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
// ===== -1 descriptor ======
FSEventStreamInvalidate(ev);
FSEventStreamRelease(ev);