1.添加属性
@property (nonatomic, strong) dispatch_source_t source;
2.开启监听
- (void)startManager {
[self startMonitorFile];
}
- (void)startMonitorFile { //监听Document文件夹的变化
NSURL *directoryURL = [NSURL URLWithString:[SandBoxHelper docPath]]; //添加需要监听的目录
int const fd =
open([[directoryURL path] fileSystemRepresentation], O_EVTONLY);
if (fd < 0) {
NSLog(@"Unable to open the path = %@", [directoryURL path]);
return;
}
dispatch_source_t source =
dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, fd,
DISPATCH_VNODE_WRITE,
DISPATCH_TARGET_QUEUE_DEFAULT);
dispatch_source_set_event_handler(source, ^() {
unsigned long const type = dispatch_source_get_data(source);
switch (type) {
case DISPATCH_VNODE_WRITE: {
PVRLog(@"Document目录内容发生变化!!!");
if (self.isConvenientFinished) {
self.isConvenientFinished = NO;
[self directoryDidChange];
}
break;
}
default:
break;
}
});
dispatch_source_set_cancel_handler(source, ^{
close(fd);
});
self.source = source;
dispatch_resume(self.source);
}
3.在退出的时候,注销一下
- (void)stopManager {
dispatch_cancel(self.source);
}
网友评论